On Sun, 9 Apr 2023 02:28:37 GMT, Tingjun Yuan <[email protected]> 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
Just as below:
public static String join(CharSequence delim, CharSequence... elems) {
return join("", "", delim, Arrays.asList(elems);
}
public static String join(CharSequence delim, Iterable<? extends CharSequence>
elems) {
return join("", "", delim, elems);
}
static String join(String prefix, String suffix, String delimiter, Iterable<?
extends CharSequence> elems) {
// main implementation
}
// used by JavaLangAccess
static String join(String prefix, String suffix, String delim, String[]
elements, int size) {
return join(prefix, suffix, delim, Arrays.asList(elements).subList(0,
size));
}
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13383#issuecomment-1501411745