Коллекции. Интерфейс List
Last updated: 5 мая 2025 г.Что же такое коллекция
?
Это можно сказать такой особый тип массива.
Мы знаем, что у обычного Java массива есть строгая граница количества элементов, которые могут в нем быть (эту границу мы задаем при инициализации вот так – int [] a = new int[5])
.
Это называется статический массив
.
Но часто может пригодиться динамический массив, то есть который может расширяться.
То есть у него нет фиксированно возможного количества элементов.
В Java в библиотеке Collections
есть много разных динамических массивов каждый из которых нужен для разных задач и ситуаций.
То есть они не просто динамические массивы, а еще и имеют разную структуру и применение.
Поэтому в Java корректно называть их не просто “динамическими массивами”, а коллекциями.
Есть четыре основных вида коллекций List
, Queue
, Set
и Map
.
Каждая из коллекций имеет свои подвиды, которые мы будем разбирать.
Важно упомянуть что List, Queue, Set и Map это интерфейсы которые имеют разные реализации (подвиды).
ArrayList
Для начала разберем реализации List
.
Благодаря классам реализующим List можно создать динамически изменяющийся массив.
Первый подвид List, который мы рассмотрим это ArrayList
.
ArrayList
– лучше использовать когда часто нужен доступ по индексу
Пример программы:
1import java.util.*;
2
3public class ListLesson {
4 public static void main(String[] args) {
5 //Создаем список.
6 //Как видим никакого размера не указываем
7 ArrayList aList = new ArrayList();
8 // добавление элемента
9 aList.add("Sunday");
10 aList.add("Monday");
11 aList.add("Tuesday");
12 // удаление элемента
13 aList.remove("Monday");
14 //Доступ к каждому элементу с помощью get.
15 //метод get для доступа к элементам по индексу
16 for(int i = 0; i< aList.size(); i++) {
17 System.out.println(aList.get(i));
18 }
19 // проверка на наличие элемента в списке
20 System.out.println(aList.contains("Tuesday"));
21 }
22}
Вывод:

LinkedList
LinkedList
– лучше использовать когда часто производиться вставка/удаление из массива, занимает больше памяти чем ArrayList.
Пример программы:
1import java.util.*;
2
3public class ListLesson {
4 public static void main(String[] args) {
5 // Создать новый объект LinkedList
6 LinkedList llist = new LinkedList();
7 // Добавление элементов в связанный список
8 // тем же методом что и у ArrayList.
9 llist.add("Days in a Week"); // добавить
10 // Добавить в произвольное место связанного списка
11 llist.add(1, "Middle");
12 llist.add(2, "End");
13 // Удаление элемента
14 llist.remove("End");
15 // Если не вписать аргумент, то удалится элемент,
16 // который был добавлен в массив наиболее давно.
17 llist.remove();
18 // Доступ к каждому элементу с помощью get
19 for (int i = 0; i < llist.size(); i++) {
20 System.out.println(llist.get(i));
21 }
22 // проверка на наличие элемента в списке
23 System.out.println(llist.contains("Tuesday"));
24 }
25}
Вывод:

Из реализаций List есть еще Vector
– это как ArrayList, только синхронизирован(для работы с потоками, их будем проходить потом).
Конвертация коллекции из одного типа в другой.
Можно при создании коллекции поместить в нее элементы из другой ранее созданной коллекции.
При этом эта другая коллекция может быть другого типа по отношению к создаваемой. То есть фактически это значит, что возможно менять тип коллекции.
Пример программы:
1import java.util.*;
2
3class ListLesson {
4 public static void main(String[] args) {
5 // создаем список
6 ArrayList aList = new ArrayList();
7 aList.add("Sunday");
8 aList.add("Monday");
9 aList.add("Tuesday");
10
11 // Создать новый объект LinkedList
12 LinkedList lList = new LinkedList();
13 lList.add("Days in a Week");
14 lList.add(1, "Middle");
15 lList.add(2, "End");
16
17 //Можно создать коллекцию с элементами другой коллекции
18 //другого типа. Можно сказать, что снизу мы поменяли тип
19 //ранее созданной коллекции lList с LinkedList на ArrayList.
20 ArrayList< String > LinkedToArray = new ArrayList<>(lList);
21 LinkedList< String > ArrayToLinked = new LinkedList<>(aList);
22
23 //Выведем на консоль коллекции
24 for(int i = 0; i < LinkedToArray.size(); i++) {
25 System.out.println(LinkedToArray.get(i));
26 }
27 for(int i = 0; i< ArrayToLinked.size(); i++) {
28 System.out.println(ArrayToLinked.get(i));
29 }
30
31 //также можно задать значение
32 //начального размера внутреннего массива
33 ArrayList< String > list2 = new ArrayList<>(10000);
34 }
35}
Вывод:

Дополнительные материалы
Официальная документация Java по интерфейсу List
Сравнение ArrayList и LinkedList на GeeksforGeeks
Руководство по коллекциям от Baeldung
Следующие уроки
Iterator в коллекциях Java
8
мин.
Интерфейс Queue в Java
9
мин.
Интерфейс Map в Java
16
мин.