我正在尝试按相反顺序对列表进行排序,然后删除重复项。我使用以下代码。
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时再次更改顺序。如何保存订单
答案 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