【问题标题】:Difference between Collections.sort(list) and list.sort(Comparator)Collections.sort(list) 和 list.sort(Comparator) 的区别
【发布时间】:2016-04-26 22:28:17
【问题描述】:

有什么理由让我更喜欢Collections.sort(list) 方法而不是简单地调用list.sort()?无论如何,Collections.sort 在内部只是调用了List 类的sort 方法。

令人惊讶的是,几乎每个人都告诉我使用Collections.sort。为什么?

【问题讨论】:

  • list.sort() 在 java 8 中的接口上提供默认方法之前无法引入
  • 我不明白为什么 list.sort 不能在没有默认方法的情况下引入。
  • @emory 在添加默认方法支持之前,向接口引入新方法会破坏接口的所有现有实现。

标签: java list sorting


【解决方案1】:

简单的答案是Collections.sort 委托给List.sort。由于一个呼叫委托给另一个,因此存在等价的。但是,最好使用List.sort 来避免额外的方法调用。

【讨论】:

    【解决方案2】:

    这只是对 API 的更改。对于像 Java 这样广泛采用的语言,通常会发生一段时间,较旧的方法更可取,以保持遗留支持。

    在这段时间之后,旧的 API 将被弃用(或者可能不会,两者都可以无限期保留)。在这段时间内,可能会对新 API 进行改进,导致其功能与原始实现略有不同,从而鼓励开发人员采用它。新 API 的要求/结果可能会略有不同,并且实施可能会发生巨大变化。

    然后,最终,新的 API 会接管,旧的 API 不再需要并被删除。在像 Java 这样被广泛采用的语言中,这可能需要数年或数十年的时间。开发人员可以计划移除 API,但社区会强制将其保留。

    【讨论】:

    • 众所周知,Sun 热衷于保持向后兼容性。这就是让 20 年前的代码在现代 JVM 上运行不变的原因。
    【解决方案3】:

    您所指的方法List.sort(comparator) 是在Java 8 中引入的,而实用方法Collections.sort 自Java 1.2 以来一直存在。

    因此,您会在 Internet 上找到很多提到该实用程序方法的参考资料,但这只是因为它在 JDK 中存在的时间更长。

    请注意Collections.sort was made in 8u20 的实现更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多