Ответ 1
Вероятно, не намного эффективнее, но намного яснее будет Iterables.toArray(Iterable, Class)
Это в значительной степени делает то, что вы делаете уже:
public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
Collection<? extends T> collection = toCollection(iterable);
T[] array = ObjectArrays.newArray(type, collection.size());
return collection.toArray(array);
}
Используя collection.size()
, это должно быть даже тиком быстрее, чем создание массива нулевой длины только для информации о типе и toArray()
создать массив с правильным размером.