如何在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.ofs不保证其元素的迭代顺序。您可以使用特定的实现,例如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中保持顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何在保持顺序的情况下更新 numpy 数据中的非连续组

如何更新导航抽屉中的有状态小部件,同时在 Android 中保持与片段相同的类?

如果元素是重复的,为什么Set.of()会抛出IllegalArgumentException?

如何在片段中使用 GetJsonFromUrlTask​​.java

JAVA中MAP值保持顺序不变

Method