如何在Java 9 Set.of中保持顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java 9 Set.of中保持顺序相关的知识,希望对你有一定的参考价值。
我在测试时注意到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));
以上是关于如何在Java 9 Set.of中保持顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何更新导航抽屉中的有状态小部件,同时在 Android 中保持与片段相同的类?
如果元素是重复的,为什么Set.of()会抛出IllegalArgumentException?