除了豐富比較器之外,Ordering()是否提供了比使用基本比較器更好的性能?谷歌Guava - 使用Ordering()使排序比使用Comparator更快嗎?
Ordering()最適合用例而非比較器的場景是什麼?
除了豐富比較器之外,Ordering()是否提供了比使用基本比較器更好的性能?谷歌Guava - 使用Ordering()使排序比使用Comparator更快嗎?
Ordering()最適合用例而非比較器的場景是什麼?
有一個單一的Collections.sort()
方法,它將一個比較器作爲參數。並且訂購是比較器。因此,無論您使用Comparator還是Ordering調用Collections.sort()
,都會使用完全相同的排序算法。
唯一的區別可能是比較器/排序的代碼。一個訂單通常是從比較,並且只有代表它。這裏的ComparatorOrdering的比較方法的代碼:
public int compare(T a, T b) {
return comparator.compare(a, b);
}
因此,如果您使用排序比較,或者如果您使用排序,它包裝此相同的比較排序,性能會幾乎相同。 「原始」比較器的性能可能稍好一些,因爲它不具有委託Ordering所具有的另一個對象的成本。但是這個成本可能是0,因爲JIT很可能會聯合代表團。
無論如何,Ordering的幾乎所有的靜態工廠方法和實例方法現在都存在於純Java 8中。因此,如果Ordering的功能存在,而您在JDK中找不到,那麼請使用Ordering。否則,只需使用比較器即可。性能差異,如果有的話,可以忽略不計。
我從你的回答中假設,沒有速度差異。 –
,如果你看到的ordering
定義你找到東西像
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
這意味着它內部的Comparator
一個孩子。我不是在談論efficiency
。但根據我的假設,它永遠不會更快,因爲Comaparator
比任何其他子Comparator
(如訂購)Interface
更本地和更接近Java
。因此比較器必須比其他任何更有效率。 Ordering Class Google Docs
「比較器」本身沒有實現。討論'Comparator'作爲一個接口的效率是沒有意義的。 – shmosel
訂購**是**比較器。 –
我想知道Collections.sort(list,Comparator)vs Collections.sort(list,Ordering)之間的性能差異 –
'Ordering'提供創建和使用比較器的便捷方法。它不應該在任何特定的Comparator實現上提供性能增強,儘管Guava通常儘可能地優化性能(參見Javadoc to ['Ordering.immutableSortedCopy()'](http://docs.guava-libraries.googlecode。 com/git/javadoc/com/google/common/collect/Ordering.html#immutableSortedCopy(java.lang.Iterable))。 – shmosel