Hi Andrej,
forEach seems like a no-brainer, but spliterator might require some
extra care.
For example, returning Spliterators.emptySpliterator() and
Collections.singletonSpliterator when appropriate *sounds* like nice little
optimizations, but Arrays.spliterator(T[]) with an empty or
single-element array
appears to be relatively cheap operations, whereas mixing implementation
could
make call-sites accepting List.of(foo).spliterator() become megamorphic.
Thus I think these should be done independently as a follow-up, along with
tests and microbenchmarks.
Thanks!
/Claes
On 2017-12-09 11:43, Andrej Golovnin wrote:
Hi Claes,
One more thing: Could you please add specialised implementations also
for the following methods:
List.forEach(Consumer)
List.spliterator()
For List12 when List12.size() == 1 please use
Collections.singletonSpliterator()
(this method should be moved to the Spliterators class and be public).
For List12 when List12.size() == 2 please use Arrays.spliterator().
For ListN when List.isEmpty() == true please use
Spliterators.emptySpliterator​()
and otherwise use Arrays.spliterator().
I’m sorry I forgot to mention, that Set12, SetN, Map12 and MapN should also
have specialised implementations for the #forEach-methods and for
the #spliterator()-methods in Set12, SetN.
Thanks!
Best regards,
Andrej Golovnin