On Tue, 21 Feb 2023 03:39:46 GMT, Tingjun Yuan <d...@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:
> 
>   Set.copyOf: need defensive copy

I'm wary of the impact of adding new wrapper classes. It may make the factory 
methods slightly slower due additional checks, but also risks increasing the 
number of classes at various call-sites which might upset call site inlining. 

An alternative design which would avoid adding more classes could be to add 
package-private accessors to the existing `Unmodifiable/Synchronized` wrapper 
classes so that `EnumSet/-Map` can retrieve the underlying set of an 
unmodifiable or synchronized `Set` or `Map` and then use it directly for these 
bulk operations. Then you'd contain the additional overhead to `EnumSet/-Map`.

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

PR Comment: https://git.openjdk.org/jdk/pull/12498#issuecomment-1478035549

Reply via email to