【问题标题】:Sort a list in reverse order and remove duplicates [duplicate]以相反的顺序对列表进行排序并删除重复项[重复]
【发布时间】:2017-10-09 06:51:16
【问题描述】:

我正在尝试以相反的顺序对列表进行排序,然后删除重复项。我正在使用以下代码。

 public static void main(String[] args) {
     List<Integer> list = new ArrayList<>();
     list.add(3);
     list.add(3);
     list.add(2);
     list.add(3);
     list.add(2);
     Collections.sort(list, Collections.reverseOrder());
     System.out.println(list);
     Set<Integer> set = new HashSet<>(list);
     System.out.println(set);
 }

它工作正常,但转换为 Set 时顺序再次更改。怎么做才能保持秩序

【问题讨论】:

  • 使用 LinkedHashSet
  • HashSet not 保留插入顺序。就是这么简单。

标签: java list data-structures


【解决方案1】:

使用LinkedHashSet 而不是HashSet

Set<Integer> set = new LinkedHashSet<>(list);

与不保证顺序的普通集合不同,LinkedHashSets 强制插入顺序。由于您已经对列表进行了排序,因此您不需要 TreeSet 提供的任何额外好处(基于自然排序或您自己选择的排序的排序)。

【讨论】:

    【解决方案2】:

    而不是HashSet使用TreeSet,访问时间更少O(log(n))而不是O(1),但它保持键的顺序

    https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多