Кажется, немного поздно, но вот мои два цента. Мы не можем иметь 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 9 и 10.
Действительно неизменный список
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (действительно неизменный список) двумя способами:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Также проверьте мой ответ для получения дополнительной информации.
Arrays.asList(new int[] { 1, 2, 3 }); определенно не компилировать Java 1.4.2, так какint[]это неObject[].