假设我有一个自然排序的TreeSet。我可以使用什么接口和方法来制作新的TreeSet,并保持与第一个列表相同的顺序。
使用相同的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());
您实际上并不需要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);