Как использовать методы add() и addAll() для списка Java
Введение
В этой статье вы узнаете о методах List
в Java add()
и addAll()
.
Добавить в список Java()
Этот метод используется для добавления элементов в список. Есть два способа добавить элементы в список.
add(E e)
: добавляет элемент в конец списка. ПосколькуList
поддерживаетGenerics
, тип добавляемых элементов определяется при создании списка.add(int index, E element)
: вставляет элемент по заданномуиндексу
. Элементы из заданногоindex
сдвигаются вправо по списку. Метод выдает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]
. Наконец, этот список будет выведен на экран.
Java-список addAll()
Этот метод используется для добавления элементов из коллекции в список. Существует два перегруженных метода addAll()
.
addAll(Collection extends E> c)
: этот метод добавляет все элементы из данной коллекции в конец список. Порядок вставки зависит от порядка, в котором их возвращает итератор коллекции.addAll(int index, Collection extends E> c)
: мы можем использовать этот метод для вставки элементов из коллекции по заданномуindex
. Все элементы в списке смещены вправо, чтобы освободить место для элементов из коллекции.
Вот несколько примеров методов 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()
указано, что операция упоминается как необязательная. Это означает, что реализация списка может не поддерживать это. В этом случае методы списка add()
вызывают UnsupportedOperationException
. Существует два распространенных сценария, в которых вы обнаружите это исключение при добавлении элементов в список:
Arrays.asList()
: этот метод возвращает список фиксированного размера, поскольку он поддерживается указанным массивом. Любая операция, в которой изменяется размер списка, вызываетUnsupportedOperationException
.Collections.unmodifiableList(List l)
: этот метод возвращает неизменяемый вид данного списка. Таким образом, операцииadd()
вызываютUnsupportedOperationException
.
Вот пример UnsupportedOperationException
с операцией add
в списке фиксированного размера:
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
с операцией add
для неизменяемого представления данного списка:
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()
.
Рекомендуемое чтение:
- Список Java
- Список массивов Java
Использованная литература:
- Список документов API
- Вопрос о StackOverflow