2017-09-16 53 views
1

是否有兩個版本的任何差異(例如性能,排序):thenComparing VS排序

版本1:

mylist.sort(myComparator.sort_item); 
mylist.sort(myComparator.sort_post); 

版本2:

// java 8 
mylist.sort(myComparator.sort_item 
      .thenComparing(myComparator.sort_post)); 

回答

2

從Java 8 API文檔:

[thenComparing]返回一個字典順序比較器與另一個 比較器。如果該比較器認爲兩個元件相等,即 比較(A,B)== 0,其他用於確定的順序。

這意味着僅當第一個比較器返回0(元素相等)時才使用第二個比較器。所以在實踐中,在大多數情況下,它應該更快,然後調用兩次排序。理論上,如果排序算法的時間複雜度爲C,那麼調用它兩次仍然是C(恆定乘法無關緊要),這兩種排序方法的複雜性是相同的。

+0

因此,這意味着,這兩個版本返回平等的結果? – nimo23

+0

不,他們沒有。 –

+3

@ nimo23他們差不多。根據Java 8,'List'接口現在有一個穩定的缺省方法'sort'。這意味着,如果您排序首先由'sort_post'然後排序'sort_item'再次,結果是相同的版本與鏈比較排序2.注意順序相反的版本1 – rhobincu

4

版本1:您正在按item排序,然後將此類排序替換爲post。有效的是,第一類是毫無意義的。

第2版:你是第一個排序由item,並在平局的情況下,打破使用post那領帶。

+0

我不明白你的意思是「無意義的」。 MYLIST的對象有兩個屬性「項」和「後」,我想在第一次排序MYLIST與「項目,比較」,並在此之後,它應該由「後」 -comparator進行排序。 – nimo23

+1

假設通過「之後」你的意思是打破平局,版本1不會這樣做。 –

+0

好的謝謝。我明白。 – nimo23