然后比较与排序
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
.
打破平局
两个版本有什么区别(例如性能、顺序)吗:
版本 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
.