Parece un poco tarde, pero aquí están mis dos centavos. No podemos tener List<int>
como int
es un tipo primitivo, por lo que solo podemos tener List<Integer>
.
Java 8 (int array)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8 y menos (matriz entera)
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
¿Necesita ArrayList y no List?
En caso de que queramos una implementación específica de, List
por ejemplo ArrayList
, podemos usar toCollection
como:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
¿Por qué list21
no se puede modificar estructuralmente?
Cuando usamos Arrays.asList
el tamaño de la lista devuelta es fijo porque la lista devuelta no lo es java.util.ArrayList
, sino una clase estática privada definida en su interior java.util.Arrays
. Entonces, si agregamos o eliminamos elementos de la lista devuelta, se UnsupportedOperationException
arrojará un . Entonces deberíamos ir list22
cuando queramos modificar la lista. Si tenemos Java8, entonces también podemos ir con list23
.
Para que quede claro, list21
puede modificarse en el sentido de que podemos llamar, list21.set(index,element)
pero esta lista puede no modificarse estructuralmente, es decir, no puede agregar o eliminar elementos de la lista. También puedes consultar esta pregunta .
Si queremos una lista inmutable, podemos envolverla como:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
Otro punto a tener en cuenta es que el método Collections.unmodifiableList
devuelve una vista no modificable de la lista especificada. Una colección de vistas no modificables es una colección que no se puede modificar y también es una vista de una colección de respaldo. Tenga en cuenta que los cambios en la colección de respaldo aún podrían ser posibles, y si ocurren, son visibles a través de la vista no modificable.
Podemos tener una lista verdaderamente inmutable en Java 9 y 10.
Lista verdaderamente inmutable
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (lista verdaderamente inmutable) de dos maneras:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
También revise esta respuesta mía para más.
Arrays.asList(new int[] { 1, 2, 3 })
:; definitivamente no compiló en Java 1.4.2, porque un noint[]
es un .Object[]