我在测试时注意到Java 9的新Set.of
方法没有返回Set的有序实现。
我如何使用这些实用程序并仍然获得有序集合?或者没有办法,只有传统的?
例:
Set mySet = Set.of(new Integer[]{1, 2, 3, 4});
//mySet can come in any order when I iterate over it
编辑 忘了提,我需要保持数组中的顺序。
从答案似乎使用好的和旧的new LinkedHashSet(Arrays.asList(myArr))
仍然是方式。
由Set
创建的不可变Set.of
s不保证其元素的迭代顺序。您可以使用特定的实现,例如LinkedHashSet
:
Set<Integer> mySet = new LinkedHashSet<>(List.of(new Integer[]{1, 2, 3, 4}));
Javadoc明确指出:“集合元素的迭代顺序未指定,可能会发生变化。”
您可以将您的集合包装在像TreeSet
这样的有序集合中(我还添加了一些泛型)
SortedSet<Integer> mySet = new TreeSet<>(Set.of(1, 2, 3, 4));
如果您需要一个维护插入顺序的集合,则必须使用LinkedHashSet
(请注意,这不是有序集合)。
Set<Integer> mySet = new LinkedHashSet<>(List.of(1, 2, 3, 4));
你不能使用Set.of
。这给你一个immutable Set
而不是一个可以订购的。
你可以做到这一点的唯一方法是你建立一个TreeSet
(如果Comparable
对象是有序的,或者你可以指定你自己的Comparator
)。
Set<Integer> mySet = new TreeSet<>(Arrays.asList(1, 2, 3, 4));