繁体   English   中英

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

[英]How to keep order in 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.of创建的不可变Set不能保证其元素的迭代顺序。 您可以使用一个特定的实现,例如LinkedHashSet

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

Javadoc明确声明:“ set元素的迭代顺序未指定,并且可能会发生变化。”

您可以将集合包装在像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 这为您提供了一个不变的Set而不是可以订购的Set

唯一的方法是构建TreeSet (如果对象为Comparable则可以排序,或者可以指定自己的Comparator )。

Set<Integer> mySet = new TreeSet<>(Arrays.asList(1, 2, 3, 4));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM