Я просто смотрел на метод, определенный в интерфейсе List:
Возвращает массив, содержащий все элементы в этом списке в правильном порядке; тип выполнения возвращаемого массива - тип указанного массива. Если список соответствует указанному массиву, он возвращается в нем. В противном случае новый массив выделяется типом среды выполнения указанного массива и размером этого списка. Если список соответствует указанному массиву с запасными местами (т.е. Массив имеет больше элементов, чем список), элемент в массиве сразу же после окончания коллекции устанавливается в нуль. Это полезно при определении длины списка только в том случае, если вызывающий абонент знает, что список не содержит никаких нулевых элементов.
<T> T[] toArray(T[] a);
И мне просто интересно, почему это реализовано таким образом, в основном, если вы передадите ему массив с длиной < в list.size(), он просто создаст новый и вернет его. Поэтому создание нового объекта Array в параметре метода бесполезно.
Кроме того, если вы передадите ему массив достаточно долго, используя размер списка, если возвращает тот же объект с объектами - на самом деле нет смысла возвращать его, поскольку он является одним и тем же объектом, но нормально для ясности.
Проблема в том, что я думаю, что это способствует немного неэффективному коду, на мой взгляд toArray должен просто получить класс и просто вернуть новый массив с содержимым.
Есть ли причина, почему он не закодирован таким образом?