Google Guava - 使用 Ordering() 比使用 Comparator 排序更快吗?

Google Guava - Does using Ordering() make sorting faster than using Comparator?

除了丰富比较器之外,与使用基本比较器相比,Ordering() 是否提供了性能改进?

Ordering() 最适合用例而不是比较器的场景是什么?

如果您看到 ordering 的定义,您会发现类似

的内容
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>

内部表示Comparator的child。我不是在谈论 efficiency 。但根据我的假设,它永远不会更快,因为 ComaparatorComparator 的任何其他 Child (如 Ordering) Interface 。因此 Comparator 必须比其他任何一个都更有效。 Ordering Class Google Docs

有一个 Collections.sort() 方法,它以 Comparator 作为参数。一个排序 是一个 比较器。因此,无论您使用比较器还是使用排序调用 Collections.sort(),都使用完全相同的排序算法。

唯一的区别可能在于 comparator/ordering 的代码。一个 Ordering 通常是 一个 Comparator 创建的,并且只有 delegates 给它。这是 ComparatorOrdering 的比较方法的代码:

public int compare(T a, T b) {
    return comparator.compare(a, b);
}

因此,如果您使用比较器进行排序,或者如果您使用包装同一比较器的排序进行排序,性能将几乎相同。 "raw" 比较器的性能可能稍好一些,因为它没有委托给 Ordering 具有的另一个对象的成本。但是这个成本可能是 0,因为 JIT 很可能会内联委托。

无论如何,几乎所有静态工厂方法和 Ordering 的实例方法现在都存在于 Java 8 中。因此,如果存在您在 [=30= 中找不到的 Ordering 功能],然后使用排序。否则,只需使用比较器。性能差异(如果有的话)可以忽略不计。