JavaRush/Курсы/JAVA 25 SELF/Интерфейсы Collection, List, Set, Map: иерархия

Интерфейсы Collection, List, Set, Map: иерархия

Открыта

1. Что такое интерфейс Collection

В Java интерфейс — это как договор: если класс реализует интерфейс, он обязан предоставить реализацию всех его методов. Интерфейс сам по себе не хранит состояние и не содержит кода (почти: начиная с Java 8 возможны default-методы, но сейчас важна базовая идея).

Collection — базовый интерфейс для большинства коллекций в Java. Он определяет, что коллекция умеет делать: добавлять элементы, удалять, узнавать размер, проверять наличие элементов и т. п.

public interface Collection<E> extends Iterable<E> {
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    boolean add(E e);
    boolean remove(Object o);
    void clear();
    Iterator<E> iterator();
    // ... и ещё куча полезных методов
}

Ключевые методы:

  • add(E e) — добавить элемент.
  • remove(Object o) — удалить элемент.
  • size() — узнать количество элементов.
  • isEmpty() — проверить, пустая ли коллекция.
  • contains(Object o) — проверить наличие элемента.
  • clear() — очистить коллекцию.
  • iterator() — получить итератор для перебора.

Почему Map не наследует Collection?

Map стоит особняком среди коллекций. Потому что Map — это набор пар «ключ → значение», а не просто набор элементов. У него другой контракт и другой набор методов. Например, в Map нет метода add, потому что добавление делается через put(key, value), и нет смысла проверять наличие значения, не зная ключа.

2. Иерархия коллекций

Мысленное «дерево» основных интерфейсов выглядит так:

Iterable
       |
   Collection
   /    |    \
List   Set   Queue
              |
            Deque
  • Iterable — самый базовый интерфейс: всё, что можно перебирать в цикле for-each.
  • Collection — расширяет Iterable, добавляет операции работы с коллекцией элементов.
  • Три главные ветки:
    • List — упорядоченный список, допускает дубликаты.
    • Set — множество уникальных элементов, порядок зависит от реализации.
    • Queue — очередь (обычно FIFO); подвид — Deque (двусторонняя очередь).

А вот Map живёт отдельно:

Map
      /   \
HashMap  TreeMap

Визуализация иерархии (схема)

+--------------------+
                    |     Iterable<E>    |
                    +--------------------+
                             |
                    +--------------------+
                    |   Collection<E>    |
                    +--------------------+
                  /     |         \
        +--------+   +-------+   +-------+
        |  List  |   |  Set |   | Queue |
        +--------+   +-------+   +-------+
                             |
                          +------+
                          |Deque |
                          +------+

+--------------------+
|      Map<K,V>      |
+--------------------+

3. List: упорядоченная коллекция с дубликатами

List — это коллекция, где:

  • Важен порядок элементов (первый, второй, третий…).
  • Допускаются одинаковые элементы (дубликаты).
  • Можно получить элемент по индексу (list.get(2)), заменить, вставить в любое место.

Примеры реализаций: ArrayList — быстрый доступ по индексу; LinkedList — хорош при частых вставках/удалениях в середине.

import java.util.*;

List<String> shoppingList = new ArrayList<>();
shoppingList.add("Молоко");
shoppingList.add("Хлеб");
shoppingList.add("Сыр");
shoppingList.add("Хлеб"); // Дубликаты разрешены!

System.out.println(shoppingList.get(1)); // "Хлеб"

Типичные методы List:

  • add(E e), add(int index, E e)
  • get(int index), set(int index, E e)
  • remove(int index), remove(Object o)
  • indexOf(Object o), lastIndexOf(Object o)

4. Set: множество уникальных элементов

Set — это коллекция, где:

  • Каждый элемент уникален (никаких дубликатов).
  • Порядок хранения не гарантируется у HashSet, может быть сортировка у TreeSet или порядок вставки у LinkedHashSet.

Примеры реализаций: HashSet, TreeSet, LinkedHashSet.

import java.util.*;

Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Аня");
uniqueNames.add("Борис");
uniqueNames.add("Аня"); // Не добавится — уже есть!

System.out.println(uniqueNames.contains("Аня")); // true
System.out.println(uniqueNames.size()); // 2

Типичные методы Set:

  • add(E e), remove(Object o)
  • contains(Object o)
  • size(), isEmpty()

5. Map: коллекция пар ключ-значение

Map — это коллекция, где:

  • Каждый элемент — пара ключ → значение.
  • Ключи уникальны, значения могут повторяться.
  • Быстрый доступ по ключу.

Примеры реализаций: HashMap, TreeMap, LinkedHashMap.

import java.util.*;

Map<String, String> phoneBook = new HashMap<>();
phoneBook.put("Аня", "+19991112233");
phoneBook.put("Борис", "+19994445566");
phoneBook.put("Аня", "+19990001122"); // Перезапишет номер Ани!

System.out.println(phoneBook.get("Аня")); // "+19990001122"
System.out.println(phoneBook.containsKey("Борис")); // true

Типичные методы Map:

  • put(K key, V value), get(K key)
  • remove(K key)
  • containsKey(K key), containsValue(V value)
  • keySet(), values(), entrySet()

6. Визуализация иерархии: всё на одной картинке

Небольшая сводная таблица:

Интерфейс Описание Примеры реализаций Ключевые особенности
List
Упорядоченный список
ArrayList, LinkedList
Доступ по индексу, дубликаты
Set
Множество уникальных значений
HashSet, TreeSet
Только уникальные элементы
Map
Пары ключ-значение
HashMap, TreeMap
Ключи уникальны, значения любые

Иерархия на схеме:

Collection
   /    |    \
List   Set   Queue
               |
             Deque

   Map (отдельно)

7. Когда использовать какой интерфейс

List

  • Когда важен порядок элементов (например, история действий пользователя).
  • Когда нужны дубликаты (например, позиции заказа).
  • Когда нужен быстрый доступ/замена по индексу.

Set

  • Когда нужна уникальность (email, логины, id).
  • Когда не важен порядок, или наоборот — нужен автоматически отсортированный набор (TreeSet).

Map

  • Когда нужно сопоставлять ключи и значения (id → объект, логин → профиль).
  • Когда нужен быстрый поиск по ключу.
  • Когда ключи должны быть уникальны, а значения — нет.

8. Типичные ошибки при работе с иерархией коллекций

Ошибка № 1: Использование неправильного интерфейса в объявлении переменной. Если вы пишете ArrayList<String> list = new ArrayList<>();, вы жёстко привязываетесь к реализации. Предпочтительнее List<String> list = new ArrayList<>(); — так проще заменить реализацию.

Ошибка № 2: Попытка добавить дубликаты в Set и ожидание, что они появятся. Это не баг, а особенность: Set по определению не хранит дубликаты. Повторная вставка игнорируется.

Ошибка № 3: Использование Map как обычной коллекции. Map — это не список и не множество. Для перебора используйте keySet(), values() или entrySet().

Ошибка № 4: Ожидание порядка в HashSet или HashMap. HashSet и HashMap не гарантируют порядок. Если он важен — берите LinkedHashSet или LinkedHashMap.

Ошибка № 5: Использование List для уникальных элементов. Если нужна уникальность — используйте Set. List не предотвращает дубликаты.

1
Задача
JAVA 25 SELF,  27 уровень,  0 лекция
Недоступна
Поиск цвета в палитре 🎨
Поиск цвета в палитре 🎨
1
Задача
JAVA 25 SELF,  27 уровень,  0 лекция
Недоступна
Отслеживание инвентаря в игре 🎮
Отслеживание инвентаря в игре 🎮
Комментарии (4)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
VictorThe main expert in Automa в Строительная компани
30 июля, 12:07
29.07.2026
nightmarakeshBackend Developer в ITHub
23 июля, 16:25
Хорошо бы был разбор перед глазами в этой лекции, что такое Hash для коллекций, Linked, Tree. Чтобы как в английском (Времена, где в одном столбце время, в строке сверху форма действия) можно было отследить по перекрестьям, коллекцию и формы для нее.
Ioanna Polyak
Уровень 51
9 ноября 2025, 12:53
Iterable | Collection / | \ List Set Queue | Deque Сохраняем)
Grrbrr7 System Engineer
21 февраля, 13:28
Зачем?)