Методы List в Java: add() и addAll()
Development, Java | Комментировать запись
В этом мануале мы поговорим о том, как в Java работают методы add() и addAll().
Метод List add()
Этот метод используется для добавления элементов в список. Существует два способа сделать это:
- add(E e): добавляет элемент в конец списка. Поскольку List поддерживает Generics, тип добавляемых элементов определяется при создании списка.
- add(int index, E element): вставляет элемент в список по заданному индексу. Элементы из заданного индекса сдвигаются по списку вправо. Если заданный индекс выходит за пределы допустимого диапазона, метод выдает IndexOutOfBoundsException.
Давайте рассмотрим несколько примеров применения List add():
package com.journaldev.examples; import java.util.ArrayList; import java.util.List; public class ListAddExamples { public static void main(String[] args) { List<String> vowels = new ArrayList<>(); vowels.add("A"); // [A] vowels.add("E"); // [A, E] vowels.add("U"); // [A, E, U] System.out.println(vowels); // [A, E, U] vowels.add(2, "I"); // [A, E, I, U] vowels.add(3, "O"); // [A, E, I, O, U] System.out.println(vowels); // [A, E, I, O, U] } }
Во-первых, этот код добавит A, E и U в список и выведет [A, E, U].
Затем этот код добавит I по индексу 2, что в результате выдаст [A, E, I, U]. Затем он добавит O по индексу 3, чтобы получилось [A, E, I, O, U]. В конце он выведет этот список на экран.
Метод List addAll()
Этот метод используется для добавления элементов из коллекции в список. Существует два перегруженных метода addAll():
- addAll(Collection<? extends E> c): этот метод добавляет все элементы из заданной коллекции в конец списка. Порядок вставки зависит от порядка, в котором их возвращает итератор коллекции.
- addAll(int index, Collection<? extends E> c): этот метод можно использовать для вставки элементов из коллекции по заданному индексу. Все элементы в списке смещаются вправо, чтобы освободить место для элементов из коллекции.
Читайте также: Переопределение и перегрузка в java
Вот несколько примеров применения метода List addAll():
package com.journaldev.examples; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ListAddAllExamples { public static void main(String[] args) { List<Integer> primeNumbers = new ArrayList<>(); primeNumbers.addAll(Arrays.asList(2, 7, 11)); System.out.println(primeNumbers); // [2, 7, 11] primeNumbers.addAll(1, Arrays.asList(3, 5)); System.out.println(primeNumbers); // [2, 3, 5, 7, 11] } }
Сначала этот код создает новый список со значениями [2, 7, 11]. Затем этот список выводится на экран.
Далее создается второй список со значением [3, 5]. После этого этот второй список добавляется к первому с помощью addAll() по индексу 1. В результате на экран выводится список [2, 3, 5, 7, 11].
Исключение UnsupportedOperationException и метод add()
В документации по методам List add() и addAll() указано, что реализация списка может не поддерживать опциональные операции. В этом случае методы list add() вызывают исключение UnsupportedOperationException. Чаще всего вы можете встретить это исключение в двух распространенных сценариях:
- Arrays.asList(): этот метод возвращает список фиксированного размера, поскольку он поддерживается указанным массивом. Любая операция, которая меняет размер списка, вызывает исключение UnsupportedOperationException.
- Collections.unmodifiedList(List l): этот метод возвращает неизменяемый вид данного списка. Соответственно, операции add() вызывают исключение UnsupportedOperationException.
Давайте взглянем на пример UnsupportedOperationException с операцией добавления элемента в список фиксированного размера:
jshell> List<Integer> ints = Arrays.asList(1,2,3); ints ==> [1, 2, 3] jshell> ints.add(4); | Exception java.lang.UnsupportedOperationException | at AbstractList.add (AbstractList.java:153) | at AbstractList.add (AbstractList.java:111) | at (#4:1)
Сначала этот код создает список фиксированного размера – [1, 2, 3]. Затем он пытается добавить в список элемент 4. Это приводит к возникновению исключения UnsupportedOperationException.
Теперь посмотрите на другой пример UnsupportedOperationException с операцией добавления в неизменяемое представление данного списка:
jshell> List<String> strs = new ArrayList<>(); strs ==> [] jshell> strs.add("A"); $6 ==> true jshell> List<String> strs1 = Collections.unmodifiableList(strs); strs1 ==> [A] jshell> strs1.add("B"); | Exception java.lang.UnsupportedOperationException | at Collections$UnmodifiableCollection.add (Collections.java:1058) | at (#8:1)
Данный код добавляет элемент A в список. Затем он пытается добавить в неизменяемое представление предыдущего списка новый элемент B. Это приводит к возникновению исключения UnsupportedOperationException.
Заключение
В этой статье вы узнали о том, как работают методы Java List add() и addAll().
Читайте также:
Tags: Java