除了丰富比较器之外,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