【问题标题】:Sorting cusom type in Set (Set<MyType>) [duplicate]对 Set 中的自定义类型进行排序(Set<My Type>)[重复]
【发布时间】:2016-06-12 18:46:54
【问题描述】:

为什么我不能Collections.sort 我的Set&lt;MyType&gt;?我的代码如下。当我使用ArrayList时,此代码运行良好,但当我使用任何类型的Set 时,我会收到此错误。

Set<Auto> set = new HashSet<Auto>();

set.add(auto1);
set.add(auto2);
set.add(auto3);
set.add(auto4);
set.add(auto5);

Collections.sort(set, new Comparator<Auto>() {
    @Override
    public int compare(Auto o1, Auto o2) {
        return o1.getMarka().compareTo(o2.getMarka());
    }
});

【问题讨论】:

  • 请勿发布代码图片;只需将代码作为文本发布,缩进 4 个空格,以便格式正确。

标签: java set


【解决方案1】:

HashSet 不是有序集合;换句话说,它不包含按特定顺序排列的元素。

您可以将HashSet 视为包含对象的包。当你把手伸进去,一个一个地拉出物体时,你不知道你以什么顺序取出元素。您无法对袋子中的元素进行排序 - 因为袋子没有按照您对它们进行排序的顺序保存它们。

元素的顺序丢失了;所以对HashSet 进行排序没有任何效果(除了Mureinik 注意到Collections.sort 采用List 而不是Set,因此您的代码甚至无法编译)。

如果您需要 Set 中的元素按特定的定义顺序排列,请使用不同的 Set 实现,例如 TreeSet

【讨论】:

    【解决方案2】:

    Sets 没有订单,因此您无法订购。正如 Javadoc 中所见,Collections#sort 接收到 List,而不是任何 Collection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多