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

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

JAVA 25 SELF
27 уровень , 0 лекция
Открыта

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 лекция
Недоступна
Отслеживание инвентаря в игре 🎮
Отслеживание инвентаря в игре 🎮
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ioanna Polyak Уровень 43
9 ноября 2025
Iterable | Collection / | \ List Set Queue | Deque Сохраняем)