按相反顺序对列表进行排序并删除重复项

时间:2017-05-10 14:35:56

标签: java list data-structures

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

 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时再次更改顺序。如何保存订单

2 个答案:

答案 0 :(得分:2)

使用LinkedHashSet代替HashSet

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

与不保证订单的普通集不同,LinkedHashSet强制执行广告订单。由于您已经对列表进行了排序,因此您不需要TreeSet提供的任何额外好处(哪些订单基于自然订购或您自己选择的订购)。

答案 1 :(得分:1)

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

  

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