Здається, трохи пізно, але ось два мої центи. Ми не можемо мати, 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[]
.