RFR: 8266571: Sequenced Collections [v8]
Stuart Marks
smarks at openjdk.org
Thu Apr 20 04:55:05 UTC 2023
On Fri, 24 Mar 2023 22:16:54 GMT, Tagir F. Valeev <tvaleev at openjdk.org> wrote:
>> Stuart Marks has updated the pull request incrementally with four additional commits since the last revision:
>>
>> - Add missing @throws and @since tags.
>> - Convert code samples to snippets.
>> - Various editorial changes.
>> - Fix up toArray(T[]) on reverse-ordered views.
>
> src/java.base/share/classes/java/util/ReverseOrderSortedMapView.java line 185:
>
>> 183:
>> 184: static <K, V> Iterator<K> descendingKeyIterator(SortedMap<K, V> map) {
>> 185: return new Iterator<>() {
>
> Probably create `descendingEntryIterator` as base, and derive `descendingKeyIterator` and `descendingValueIterator`? This way, `map.get()` inside `descendingValueIterator` and `descendingEntryIterator` could be avoided.
Not sure this will help. The fundamentals of advancing the descending iterator for SortedMap involve getting the last key of the current view (via the `lastKey` method) and then excluding it from the view with `headMap(lastKey)`. This allows iterating the keys in reverse without any `get` calls (though of course the inclusive/exclusive searching for the last key does involve probing the map). To build a descending entrySet iterator, one would have to do all of the above and then add a `get` call to obtain the value to construct the Entry. This adds a `get` call here but then saves a `get` call elsewhere. Seems like a wash to me.
It's kind of a shame because `TreeMap` internally has `getLastEntry`. Its `lastKey` method calls it and then throws away the Entry. :-( But this doesn't matter, since `TreeMap` is a `NavigableMap` and its reverse iteration and views are all based on `descendingMap`, so the `ReverseOrderSortedMapView` stuff isn't used at all.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/7387#discussion_r1172078247
More information about the core-libs-dev
mailing list