Why does Set.of disallow duplicate elements?
Remi Forax
forax at univ-mlv.fr
Sat Jan 30 20:30:04 UTC 2021
Set.of() is the closest way we've got to a literal Set without having introduced a special syntax for that in the language.
The idea is that if you conceptually want to write
Set<String> set = { "hello", "world" };
instead, you write
Set<String> set = Set.of("hello", "world");
In that context, it makes sense to reject Set constructed with the same element twice because this is usually a programming error.
So
Set.of("hello", "hello")
throws an IAE.
If you want a Set from a collection of elements, you can use
Set.copyOf(List.of("hello", "hello"))
regards,
Rémi
----- Mail original -----
> De: "dfranken jdk" <dfranken.jdk at gmail.com>
> À: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Envoyé: Samedi 30 Janvier 2021 19:30:06
> Objet: Why does Set.of disallow duplicate elements?
> Dear users,
>
> While looking at the implementation of Set.of(...) I noticed that
> duplicate elements are not allowed, e.g. Set.of(1, 1) will throw an
> IllegalArgumentException. Why has it been decided to do this?
>
> My expectation was that duplicates would simply be removed.
>
> If I do for instance new HashSet<>(<collection containing duplicates>)
> it works and duplicates are removed. To me, it looks a bit inconsistent
> to have duplicates removed for a collection passed in the constructor,
> but not for a collection (even though it is a vararg array) passed to a
> static factory method.
>
> Kind regards,
>
> Dave Franken
More information about the core-libs-dev
mailing list