然后比较与排序

thenComparing vs sort

两个版本有什么区别(例如性能、顺序)吗:

版本 1:

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

版本 2:

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

来自 Java8 API 文档:

[thenComparing] Returns a lexicographic-order comparator with another comparator. If this Comparator considers two elements equal, i.e. compare(a, b) == 0, other is used to determine the order.

这意味着仅当第一个 returns 0(元素相等)时才使用第二个比较器。所以在实践中,在大多数情况下它应该比调用两次排序更快。

理论上,如果排序算法的时间复杂度为C,那么调用两次仍然是C(常数乘法无所谓),两种排序方法的复杂度为相同。

版本 1:您正在按 item 排序,然后丢弃该排序以改为按 post 排序。实际上,第一种排序是没有意义的。

版本 2:您首先按 item 排序,如果出现平局,则使用 post.

打破平局