使不同的TreeSet与另一个保持相同的顺序

问题描述 投票:0回答:2

假设我有一个自然排序的TreeSet。我可以使用什么接口和方法来制作新的TreeSet,并保持与第一个列表相同的顺序。

java treeset
2个回答
1
投票

使用相同的Comparator(如果您的元素实现naturalOrder,则使用Comparable):

class A implements Comparable<A> { }


final TreeSet<A> firstSet = new TreeSet<>();
final TreeSet<A> secondSet = new TreeSet<>(firstSet.comparator());
final TreeSet<A> secondSetNaturalOrder = new TreeSet<>(Comparator.naturalOrder());

0
投票

您实际上并不需要TreeSet <>来执行此操作。您可以使用LinkedHashSet <>()。

       List<Integer> list = new ArrayList<>(List.of(10,3,2,2,1,20,40,2));

      Set<Integer> set1 = new LinkedHashSet<>();
      set1.addAll(list);

除了已删除的重复项,将保持顺序。

      System.out.println("set1 = " + set1);
      System.out.println("list = " + list);

但是对于TreeSet,该集合按对象的natural order排序。

      Set<Integer> set2 = new TreeSet<>();

      set2.addAll(list);
      list.sort(Comparator.naturalOrder());

同样,顺序相同但已排序。 TreeSet默认为自然顺序排序。对于List.sort(),必须提供comparator

  System.out.println("set2 = " + set2);
  System.out.println("list = " + list);
© www.soinside.com 2019 - 2024. All rights reserved.