Sembra un po 'tardi ma ecco i miei due centesimi. Non possiamo avere List<int>
come int
è un tipo primitivo, quindi possiamo solo avereList<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 e precedenti (array intero)
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
Hai bisogno di ArrayList e non di List?
Nel caso in cui desideriamo un'implementazione specifica, List
ad esempio ArrayList
, possiamo usare toCollection
come:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
Perché list21
non può essere modificato strutturalmente?
Quando utilizziamo Arrays.asList
la dimensione dell'elenco restituito viene riparato perché l'elenco restituito non lo è java.util.ArrayList
, ma una classe statica privata definita all'interno java.util.Arrays
. Quindi, se aggiungiamo o rimuoviamo elementi dall'elenco restituito, UnsupportedOperationException
verrà lanciato un. Quindi dovremmo andare con list22
quando vogliamo modificare l'elenco. Se abbiamo Java8, allora possiamo anche andare conlist23
.
Per essere chiari list21
può essere modificato nel senso che possiamo chiamare list21.set(index,element)
ma questo elenco potrebbe non essere modificato strutturalmente, cioè non è possibile aggiungere o rimuovere elementi dall'elenco. Puoi anche controllare questa domanda .
Se vogliamo un elenco immutabile, possiamo inserirlo come segue:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
Un altro punto da notare è che il metodo Collections.unmodifiableList
restituisce una vista non modificabile dell'elenco specificato. Una raccolta di viste non modificabile è una raccolta non modificabile ed è anche una vista su una raccolta di supporto. Si noti che le modifiche alla raccolta di backup potrebbero essere ancora possibili e, se si verificano, sono visibili attraverso la vista non modificabile.
Possiamo avere un elenco davvero immutabile in Java 9 e 10.
Elenco veramente immutabile
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (Elenco veramente immutabile) in due modi:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Controlla anche questa mia risposta per ulteriori informazioni.
Arrays.asList(new int[] { 1, 2, 3 })
:; sicuramente non compilato in Java 1.4.2, perché an nonint[]
è un .Object[]