【发布时间】:2020-07-28 01:11:24
【问题描述】:
我不明白为什么 List.sort() 没有没有比较器的版本。
我特别看到可以使用 null:list.sort(null) 调用 List.sort,而且它似乎使用自然顺序进行排序。
我注意到在我的 IDE Collections.sort() 调用 List.sort(null),所以我想知道为什么 List.sort 似乎最近在 Java 8 中引入了没有没有比较器的简单版本,这在很多情况下是不需要的。
此外,我不确定在这种情况下是否更好地调用 List.sort(null) 以避免额外的调用,或者是否仍然更喜欢调用 Collections.sort() 并避免丑陋的 null 参数。
【问题讨论】:
-
@Slaw 哈哈,在删除该评论之前阅读该方法的 javadocs。这让我觉得 OP 当然可以简单地调用
list.sort(null)。我不会错过list.sort()过载。 -
@ernest_k 首先允许
null或无参数重载的唯一问题是中断类型安全。当然,按自然顺序排序是一种极其常见的情况,因此牺牲类型安全性而不是一直指定Comparator.naturalOrder()是值得的(我知道我倾向于在适当的时候通过null)。跨度> -
@Slaw 同意。我认为造成差异的原因是
list.sort(Comparator<T>)是在 Java 8 中引入的(即编译时的泛型和类型安全);而Collections.sort()是在Java 5 之前引入的。我还认为允许null作为list.sort的参数是出于适应向后兼容性的需要(不要在ListAPI 中将其推得太远)。 -
@ernest_k 这是有道理的。我相信 Holger 对流中的排序提出了类似的案例:stackoverflow.com/a/47867848/6395627
标签: java list sorting comparator comparable