有单一的 Collections.sort() 方法,将Comparator作为参数。和订购 的 是一个 强> 比较。因此,无论您是否打电话,都会使用完全相同的排序算法 Collections.sort() 与比较器或订购。
Collections.sort()
唯一的区别可能是比较器/排序的代码。通常会创建订购 的 从 强> 比较者,只有 的 代表 强> 它。这是ComparatorOrdering的比较方法的代码:
public int compare(T a, T b) { return comparator.compare(a, b); }
因此,如果使用比较器进行排序,或者使用包装此同一比较器的Ordering进行排序,则性能几乎相同。使用“原始”比较器可能会有稍微好一点的性能,因为它没有委托给Ordering所具有的另一个对象的成本。但是这个成本可能是0,因为JIT最有可能内联代表团。
无论如何,几乎所有的静态工厂方法和Ordering的实例方法现在都存在于普通的Java 8中。因此,如果存在您在JDK中找不到的Ordering功能,那么请使用Ordering。否则,只需使用比较器。性能差异(如果有的话)可以忽略不计。
如果你看到的定义 ordering 你发现了类似的东西
ordering
@GwtCompatible public abstract class Ordering<T> extends Object implements Comparator<T>
这意味着它内部是一个孩子 Comparator 。我不是在谈论 efficiency 。但按照我的假设,它永远不会更快,因为 Comaparator 更天然,更接近 Java 比任何其他孩子的 Comparator (喜欢 的 订购 强> ) Interface 。因此比较器必须比任何其他更有效。 订购类Google文档
Comparator
efficiency
Comaparator
Java
Interface