如何在Java 9 Set.of中保持顺序

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

我在测试时注意到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))仍然是方式。

java set
3个回答
4
投票

Set创建的不可变Set.ofs不保证其元素的迭代顺序。您可以使用特定的实现,例如LinkedHashSet

Set<Integer> mySet = new LinkedHashSet<>(List.of(new Integer[]{1, 2, 3, 4}));

2
投票

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));

0
投票

你不能使用Set.of。这给你一个immutable Set而不是一个可以订购的。

你可以做到这一点的唯一方法是你建立一个TreeSet(如果Comparable对象是有序的,或者你可以指定你自己的Comparator)。

Set<Integer> mySet = new TreeSet<>(Arrays.asList(1, 2, 3, 4));
© www.soinside.com 2019 - 2024. All rights reserved.