default random access list spliterator
Michael Hixson
michael.hixson at gmail.com
Mon Mar 7 09:02:34 UTC 2016
The default List.spliterator() is iterator-based. Could this be
improved for random access lists, using List.get(int) to fetch
elements instead of List.iterator()?
I think it could improve most on Spliterator.trySplit(). The current
implementation allocates a new array for split-off elements. I see
almost twice the throughput from list.parallelStream().forEach(...)
with a custom get(int)-based implementation over the default one.
For example, instead of this:
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}
I'm suggesting something like this:
default Spliterator<E> spliterator() {
return (this instanceof RandomAccess)
? Spliterators.randomAccessListSpliterator(this)
: Spliterators.spliterator(this, Spliterator.ORDERED);
}
where randomAccessListSpliterator is new code that looks a lot like
Spliterators.ArraySpliterator.
-Michael
More information about the core-libs-dev
mailing list