Кажется, немного поздно, но вот мои два цента. Мы не можем иметь 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[]
.