Мне нужно заполнить массив tiendas значениями tiendasList.
Переведено автоматически
Ответ 1
Либо:
Foo[] array = list.toArray(newFoo[0]);
или:
Foo[] array = newFoo[list.size()]; list.toArray(array); // fill the array
Обратите внимание, что это работает только для массивов ссылочных типов. Для массивов примитивных типов используйте традиционный способ:
List<Integer> list = ...; int[] array = newint[list.size()]; for(inti=0; i < list.size(); i++) array[i] = list.get(i);
Обновить:
Теперь рекомендуется использовать list.toArray(new Foo[0]);, а не list.toArray(new Foo[list.size()]);.
Из JetBrains Intellij Idea inspection:
Существует два стиля преобразования коллекции в массив: либо с использованием массива заданного размера (например, c.toArray(new String[c.size()])), либо с использованием пустого массива (например, c.toArray(new String[0]).
В старых версиях Java рекомендовалось использовать массив заранее определенного размера, поскольку вызов отражения, необходимый для создания массива нужного размера, был довольно медленным. Однако после последних обновлений OpenJDK 6 этот вызов был усовершенствован, что сделало производительность версии с пустым массивом такой же, а иногда даже лучше, по сравнению с версией с предварительным размером. Также передача массива с заданным размером опасна для параллельной или синхронизированной коллекции, поскольку возможна гонка данных между вызовами size и toArray, что может привести к дополнительным нулям в конце массива, если коллекция была одновременно уменьшена во время операции.
Эта проверка позволяет придерживаться единого стиля: либо использовать пустой массив (что рекомендуется в современной Java), либо использовать массив заранее определенного размера (что может быть быстрее в старых версиях Java или JVM, не основанных на HotSpot).