Wydaje się, że trochę późno, ale oto moje dwa centy. Nie możemy mieć List<int>
za int
to prymitywny typ tak możemy mieć tylko List<Integer>
.
Java 8 (tablica int)
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list11 =Arrays.stream(ints).boxed().collect(Collectors.toList());
Java 8 i niższe (tablica liczb całkowitych)
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
Potrzebujesz ArrayList, a nie List?
Jeśli chcemy konkretnej implementacji List
np. ArrayList
Możemy użyć toCollection
jako:
ArrayList<Integer> list24 = Arrays.stream(integers)
.collect(Collectors.toCollection(ArrayList::new));
Dlaczego list21
nie można modyfikować strukturalnie?
Kiedy używamy, Arrays.asList
rozmiar zwracanej listy jest ustalony, ponieważ zwracana lista nie jest java.util.ArrayList
, ale prywatną klasą statyczną zdefiniowaną w środku java.util.Arrays
. Więc jeśli dodamy lub usuniemy elementy ze zwróconej listy, UnsupportedOperationException
zostanie wygenerowany znak „ an” . Więc powinniśmy iść, list22
kiedy chcemy zmodyfikować listę. Jeśli mamy Javę 8, możemy również skorzystać z list23
.
Dla jasności list21
można zmodyfikować w tym sensie, że możemy wywoływać, list21.set(index,element)
ale ta lista może nie być modyfikowana strukturalnie, tj. Nie może dodawać ani usuwać elementów z listy. Możesz również sprawdzić to pytanie .
Jeśli chcemy niezmienną listę, możemy ją zawinąć jako:
List<Integer> list 22 = Collections.unmodifiableList(Arrays.asList(integers));
Inną kwestią do odnotowania jest to, że metoda Collections.unmodifiableList
zwraca niemodyfikowalny widok podanej listy. Kolekcja niemodyfikowalna jest kolekcją niemodyfikowalną, a także widokiem na kolekcję podkładową. Należy pamiętać, że zmiany w kolekcji kopii zapasowych mogą być nadal możliwe, a jeśli wystąpią, są widoczne w widoku niemodyfikowalnym.
Możemy mieć naprawdę niezmienną listę w Javie 9 i 10.
Naprawdę niezmienna lista
Java 9:
String[] objects = {"Apple", "Ball", "Cat"};
List<String> objectList = List.of(objects);
Java 10 (lista prawdziwie niezmienna) na dwa sposoby:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Sprawdź również moją odpowiedź, aby uzyskać więcej.
Arrays.asList(new int[] { 1, 2, 3 })
:; zdecydowanie nie skompilować w Java 1.4.2, ponieważint[]
jest nieObject[]
.