RFR: 8372946 - TreeMap sub-map entry spliterator is expensive [v2]

Oli Gillespie ogillespie at openjdk.org
Tue Jan 27 18:25:59 UTC 2026


On Mon, 26 Jan 2026 16:01:11 GMT, Chen Liang <liach at openjdk.org> wrote:

>> Oli Gillespie has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Fix failing test
>
> src/java.base/share/classes/java/util/TreeMap.java line 2028:
> 
>> 2026:             }
>> 2027: 
>> 2028:             public abstract Spliterator<Map.Entry<K,V>> spliterator();
> 
> I don't think you need this huge a patch. I think you should just do:
> Suggestion:
> 
>             public Spliterator<Map.Entry<K,V>> spliterator() {
>                 return Spliterators.spliterator(iterator(), Spliterator.DISTINCT);
>             }
> 
> Your patch is introducing spliterator behavioral changes unrelated to the performance regression fix.

Thanks for looking. 

I suppose you mean Spliterators.spliteratorUnknownSize?

Hmm - I made the change this way to be consistent with the existing `SubMapKeyIterator` and `DescendingSubMapKeyIterator`, simply adding the same functionality for the Entry versions. Do you think *those* are overcomplicated too, or there's a reason they're like that that doesn't apply to the Entry versions? I don't know why they were originally added, to be honest, I didn't find much useful context in the history.

I don't know Spliterator well enough to spot any subtle behavioural differences, that's one reason I chose to follow the existing patterns. 

DescendingSubMapEntryIterator is SORTED but SubMapEntryIterator is not, so I'd have to account for that too.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28608#discussion_r2733284522


More information about the core-libs-dev mailing list