RFR: 8266571: Sequenced Collections

ExE Boss duke at openjdk.org
Mon Mar 20 23:45:00 UTC 2023


On Tue, 8 Feb 2022 17:23:38 GMT, Stuart Marks <smarks at openjdk.org> wrote:

> PR for Sequenced Collections implementation.

Note that `SortedMap::firstKey` and `SortedMap::lastKey` can now both have a default implementation that delegates to `SequencedMap::firstEntry` and `SequencedMap::lastEntry` respectively.

src/java.base/share/classes/java/util/SequencedMap.java line 343:

> 341:         return new SeqEntrySet();
> 342:     }
> 343: }

Missing trailing newline:
Suggestion:

}

src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java line 554:

> 552:     public E removeLast() {
> 553:         synchronized (lock) {
> 554:            int size = getArray().length;

Wrong indentation:
Suggestion:

            int size = getArray().length;

(this would be avoided if the JDK was using the more accessible tabs[^1])

[^1]: prettier/prettier#7475

src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java line 1734:

> 1732:                     it = base.listIterator(base.size());
> 1733:                 }
> 1734:             }

Storing the `size` in a field allows `Reversed::stream().estimateSize()` to match `Reversed::size()`:
Suggestion:

            final ListIterator<E> it;
            final int size;

            DescendingIterator() {
                synchronized (lock) {
                    size = base.size();
                    it = base.listIterator(size);
                }
            }

src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java line 1803:

> 1801:         public Spliterator<E> spliterator() {
> 1802:             // TODO can probably improve this
> 1803:             return Spliterators.spliteratorUnknownSize(new DescendingIterator(), 0);

Suggestion:

            var it = new DescendingIterator();
            return Spliterators.spliterator(
                    it, it.size,
                    Spliterator.IMMUTABLE | Spliterator.ORDERED);

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

PR Comment: https://git.openjdk.org/jdk/pull/7387#issuecomment-1308200115
PR Review Comment: https://git.openjdk.org/jdk/pull/7387#discussion_r1139871748
PR Review Comment: https://git.openjdk.org/jdk/pull/7387#discussion_r1103614429
PR Review Comment: https://git.openjdk.org/jdk/pull/7387#discussion_r1103615024
PR Review Comment: https://git.openjdk.org/jdk/pull/7387#discussion_r1103615337


More information about the core-libs-dev mailing list