Подтвердить что ты не робот

Массив в коллекцию: оптимизированный код

Есть ли лучший способ достичь этого?

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;
}

Просто посмотрев на него, Я не считаю его более быстрым, чем первый метод.

4b9b3361

Ответ 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);