On Sun, 9 Apr 2023 02:28:37 GMT, Tingjun Yuan <d...@openjdk.org> wrote:
>> In the current implementation of `String.join(CharSequence, Iterable)`, the >> temp array `elems` is always initialized with a length of 8. It will cause >> many array recreations when the `Iterable` contains more than 8 elements. >> Furthermore, it's very common that an `Iterable` is also a `Collection`. So >> if the `Iterable` is an instance of `Collection`, the initial length of the >> array can be `((Collection<?>)elements).size()`. It will not change the >> current behavior even if the `Collection` is modified asynchronously. >> >> I don't know whether this change requires a CSR request. > > Tingjun Yuan has updated the pull request incrementally with one additional > commit since the last revision: > > Add benchmark You can also use [`Spliterators.iterator(Spliterator)`] to convert the [`Spliterator`] into an [`Iterator`] after the size computation without needing to change the loop. [`Spliterators.iterator(Spliterator)`]: https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Spliterators.html#iterator%28java.util.Spliterator%29 [`Spliterator`]: https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Spliterator.html [`Iterator`]: https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/Iterator.html ------------- PR Comment: https://git.openjdk.org/jdk/pull/13383#issuecomment-1501077218