RFR: 8302818: Optimize wrapper sets and immutable sets of Enums [v2]

liach duke at openjdk.org
Mon Feb 20 13:19:30 UTC 2023


On Mon, 20 Feb 2023 13:15:03 GMT, Tingjun Yuan <duke at openjdk.org> wrote:

>> Currently, the two subclasses of `java.util.EnumSet` optimize bulk operations when the argument is also a `EnumSet`, but there is no such optimization for wrapper sets (returned by `Collections.unmodifiableSet`, `Collections.synchronizedSet`, etc.) and immutable sets (returned by `Set.of` methods) of `Enum`s.
>> 
>> This PR introduces optimization classes for these situations.  No public APIs are changed.
>
> Tingjun Yuan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Optimize `EnumSet.copyOf` and `Set.copyOf`

src/java.base/share/classes/java/util/EnumSet.java line 186:

> 184:             } else {
> 185:                 while (i.hasNext())
> 186:                     result.add(i.next());

Can't we just use addAll in all cases?

src/java.base/share/classes/java/util/Set.java line 742:

> 740:         E e1 = it.next();
> 741:         if (!it.hasNext()) {
> 742:             return Set.of(e0, e1);

Bad change, doesn't handle e0.equals(e1), and this is getting beyond the original issue

-------------

PR: https://git.openjdk.org/jdk/pull/12498


More information about the core-libs-dev mailing list