Кажется, немного поздно, но вот мои два цента. У нас не может быть List<int>
, поскольку int
является примитивным типом, поэтому мы можем иметь только List<Integer>
.
Java 8 (массив int)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8 и ниже (целочисленный массив)
Integer[] integers = new Integer[] {1,2,3,4,5};
List<Integer> list21 = Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List<Integer> list22 = new ArrayList<>(Arrays.asList(integers)); // good
List<Integer> list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only
Нужен ArrayList, а не список?
В случае, если мы хотим конкретную реализацию List
, например. ArrayList
тогда мы можем использовать toCollection
как:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
Почему list21
нельзя структурно изменить?
Когда мы используем Arrays.asList
, размер возвращаемого списка фиксирован, потому что возвращаемый список не java.util.ArrayList
, а закрытый статический класс, определенный внутри java.util.Arrays
. Поэтому, если мы добавим или удалим элементы из возвращенного списка, будет выброшено UnsupportedOperationException
. Поэтому мы должны пойти с list22
, когда мы хотим изменить список. Если у нас есть Java8, то мы также можем перейти с list23
.
Для ясности list21
можно изменить в том смысле, что мы можем вызвать list21.set(index,element)
, но этот список не может быть структурно изменен, т.е. не может добавлять или удалять элементы из списка. Вы также можете проверить этот вопрос .
Если мы хотим неизменный список, мы можем обернуть его как:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
Еще один момент, на который следует обратить внимание: метод Collections.unmodifiableList
возвращает неизменяемое представление указанного списка. Неизменяемая коллекция представлений - это коллекция, которая не может быть изменена, а также является представлением резервной коллекции. Обратите внимание, что изменения в резервной коллекции все еще возможны, и если они происходят, они видны через неизменяемое представление.
У нас может быть действительно неизменный список в Java 10.
Java 10 (Действительно неизменный список) двумя способами:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Также проверьте этот ответ моего для большего.