Массив в коллекцию: оптимизированный код
Есть ли лучший способ достичь этого?
public static List<String> toList(String[] array) {
List<String> list = new ArrayList(array.length);
for(int i=0; i<array.length; i++)
list.add(array[i]);
return list;
}
ПРИМЕЧАНИЕ: Arrays.asList(a) Возвращает список фиксированного размера, поддерживаемый указанным массивом. (Изменения в возвращенном списке "write through" в массив.). Я не хочу этого поведения. Я предполагаю, что моя функция выше обходит это (или я ошибаюсь?)
Итак, здесь мы имеем альтернативный метод:
public static List<String> toList(String[] array) {
List<String> list = new ArrayList(array.length);
list.addAll(Arrays.asList(array));
return list;
}
Просто посмотрев на него, Я не считаю его более быстрым, чем первый метод.
Ответы
Ответ 1
Что вы подразумеваете под улучшением:
более читаемый:
List<String> list = new ArrayList<String>(Arrays.asList(array));
меньше потребления памяти и, возможно, быстрее (но определенно не потокобезопасно):
public static List<String> toList(String[] array) {
if (array==null) {
return new ArrayList(0);
} else {
int size = array.length;
List<String> list = new ArrayList(size);
for(int i = 0; i < size; i++) {
list.add(array[i]);
}
return list;
}
}
Btw: вот ошибка в вашем первом примере:
array.length
вызовет исключение нулевого указателя, если массив равен null, поэтому сначала нужно выполнить проверку if (array!=null)
.
Ответ 2
Arrays.asList(array);
Пример:
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
Ответ 3
Arrays.asList(array)
Arrays
использует new ArrayList(array)
. Но это не java.util.ArrayList
. Это очень похоже. Обратите внимание, что этот конструктор принимает массив и помещает его в качестве базового массива списка. Так что это O(1)
.
Если у вас уже создан список, Collections.addAll(list, array)
, но это менее эффективно.
Обновление: Таким образом, ваш Collections.addAll(list, array)
станет хорошим вариантом. Оберткой является guava Lists.newArrayList(array)
.
Ответ 4
Другой способ сделать это:
Collections.addAll(collectionInstance,array);
Ответ 5
Как насчет:
List myList = new ArrayList();
String[] myStringArray = new String[] {"Java", "is", "Cool"};
Collections.addAll(myList, myStringArray);
Ответ 6
Вы можете использовать:
list.addAll(Arrays.asList(array));
Ответ 7
Вы проверили Arrays.asList()
; см. API
Ответ 8
Вы можете попробовать что-то вроде этого:
List<String> list = new ArrayList<String>(Arrays.asList(array));
public ArrayList (коллекция c)
Создает список, содержащий элементы указанной коллекции, в порядке их возврата сборщик итератор. ArrayList экземпляр имеет начальную емкость 110% - размер указанного коллекция.
Взято из здесь
Ответ 9
Да, есть. Вы можете использовать класс Arrays из пакета java.util. *. Тогда на самом деле это всего лишь одна строка кода.
List<String> list = Arrays.asList(array);