【问题标题】:Why I can't use Comparator to sort primitives?为什么我不能使用 Comparator 对基元进行排序?
【发布时间】:2010-12-29 21:38:27
【问题描述】:

由于 Java 5 具有自动装箱功能,为什么我不能使用 Comparator 对原语进行排序? int 不会被包装到 Integer 中?

【问题讨论】:

  • 比较器是使用泛型定义的,而泛型不处理原语。但是, Arrays.sort() 不使用 Comparator ...也许您可以说明您要做什么。
  • @Peter Lawrey 刚刚为 SCJP 考试而学习。并想知道比较器和包装有什么问题..

标签: java sorting wrapper autoboxing


【解决方案1】:

Arrays.sort(..) 具有用于排序原始数组的专用重载。

如果您需要除标准规则之外的任何特殊排序规则,恐怕您必须使用自动装箱。除此之外,您还必须将数组转换为 Integer[],因为 int[] 没有自动装箱。

如果你不是在谈论数组,而是在谈论集合——那么你别无选择——集合只能包含对象。

【讨论】:

  • 而且他们不使用比较器。
  • 我怀疑为什么集合不能保存原语,如果我使用 int 它应该被包装成一个 Integer,它是一个 Objects..
  • 集合是使用泛型定义的,而泛型不支持原语。您可以拥有像 trove.starlight-systems.com 这样的原语的集合,但这些不符合标准接口。
【解决方案2】:

因为您不能使用原始类型参数化 Comparator<T> 或任何其他参数化类型。

是的,这很烦人……您不能创建List<int>Map<String, boolean> 等,也不能编写适用于对象类型和原语的通用方法。您必须为 8 种原始类型中的每一种都有专用的方法。但这是自 Java 1 以来我们一直坚持的设计。责备 James Gosling ;-)

正如 Bozho 所指出的,Arrays.sort(...) 提供了您需要的所有排序方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2019-04-07
    • 2018-10-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多