Поиск по сайту:

Как использовать методы add() и addAll() для списка Java


Введение

В этой статье вы узнаете о методах List в Java add() и addAll().

Добавить в список Java()

Этот метод используется для добавления элементов в список. Есть два способа добавить элементы в список.

  1. add(E e): добавляет элемент в конец списка. Поскольку List поддерживает Generics, тип добавляемых элементов определяется при создании списка.
  2. 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().

  1. addAll(Collection c): этот метод добавляет все элементы из данной коллекции в конец список. Порядок вставки зависит от порядка, в котором их возвращает итератор коллекции.
  2. addAll(int index, Collection 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. Существует два распространенных сценария, в которых вы обнаружите это исключение при добавлении элементов в список:

  1. Arrays.asList(): этот метод возвращает список фиксированного размера, поскольку он поддерживается указанным массивом. Любая операция, в которой изменяется размер списка, вызывает UnsupportedOperationException.
  2. 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