Это будет работать нормально. Но с некоторыми оговорками:
Список, возвращаемый из asList, имеет фиксированный размер. Итак, если вы хотите иметь возможность добавлять или удалять элементы из возвращаемого списка в своем коде, вам нужно будет обернуть его в новый ArrayList. В противном случае вы получите UnsupportedOperationException.
Список, возвращаемый из asList(), поддерживается исходным массивом. Если вы измените исходный массив, список также будет изменен. Это может удивить.
Ответ 3
(старый поток, но всего 2 цента, поскольку ни в одном не упоминается Guava или другие библиотеки и некоторые другие детали)
Если вы можете, используйте Guava
Стоит указать на способ Guava, который значительно упрощает эти манипуляции:
Использование
Для неизменяемого списка
Используйте ImmutableList класс и его of() и copyOf() фабричные методы (элементы не могут быть нулевыми):
List<String> il = ImmutableList.of("string", "elements"); // from varargs List<String> il = ImmutableList.copyOf(aStringArray); // from array
Основной привлекательностью может быть уменьшение беспорядка из-за универсальности для обеспечения безопасности типов, поскольку использование заводских методов Guava позволяет большую часть времени определять типы. Однако этот аргумент содержит меньше аргументов, поскольку Java 7 появилась с новым оператором diamond.
Но это не единственная причина (и Java 7 еще не везде): сокращенный синтаксис также очень удобен, а инициализаторы методов, как видно выше, позволяют писать более выразительный код. Вы выполняете за один вызов Guava то, что занимает 2 с текущими коллекциями Java.
Обратите внимание, что возвращаемый тип для asList() является List использующим конкретную ArrayList реализацию, но это НЕjava.util.ArrayList. Это внутренний тип, который эмулирует ArrayList но на самом деле напрямую ссылается на переданный массив и выполняет в нем "сквозную запись" (изменения отражены в массиве).
Он запрещает модификации с помощью некоторых методов List API путем простого расширения AbstractList (таким образом, добавление или удаление элементов не поддерживается), однако он позволяет вызовам set() переопределять элементы. Таким образом, этот список на самом деле не является неизменяемым, и вызов asList() следует обернуть с помощью Collections.unmodifiableList().
Смотрите следующий шаг, если вам нужен изменяемый список.
Для изменяемого списка
То же, что и выше, но обернуто фактическим java.util.ArrayList:
// for Java 1.5+ static <T> List<T> arrayToList(final T[] array) { final List<T> l = newArrayList<T>(array.length);
for (final T s : array) { l.add(s); } return (l); }
// for Java < 1.5 (no generics, no compile-time type-safety, boo!) static List arrayToList(final Object[] array) { finalListl=newArrayList(array.length);
for (inti=0; i < array.length; i++) { l.add(array[i]); } return (l); }
Ответ 4
Поскольку этот вопрос довольно старый, меня удивляет, что никто еще не предложил простейшую форму: