简体   繁体   中英

How to keep order in Java 9 Set.of

I've noted while testing that the new Set.of method of Java 9 doesn't return an ordered implementation of a Set.

How can I use such utilities and still get an ordered collection? Or there is no way, only the traditional ones?

Ex.:

Set mySet = Set.of(new Integer[]{1, 2, 3, 4});
//mySet can come in any order when I iterate over it

EDIT
Forgot to mention, I need to keep the order that comes in the array.

From the answers it seems like using the good and old new LinkedHashSet(Arrays.asList(myArr)) is still the way.

The immutable Set s created by Set.of make no guarantee about the iteration order of their elements. You could use a specific implementation that does, such as a LinkedHashSet :

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

The Javadoc explicitely states: "The iteration order of set elements is unspecified and is subject to change."

You could wrap your set in a sorted set like TreeSet (I also added some generics)

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

If you need a set that maintains insertion order, you will have to use a LinkedHashSet instead (note that this is not a sorted set).

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

You can't using Set.of . That gives you an immutable Set instead of one which can be ordered.

The only way you could do this is if you build a TreeSet instead (which is ordered if the object if Comparable , or you can specify your own Comparator ).

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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