Назад к вопросам
Junior
87
questionbank

Расскажите об иерархии коллекций в Java.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Иерархия коллекций в Java построена вокруг двух корневых интерфейсов: Collection и Map. Она определена в пакете java.util.

  • Collection<E>: Корневой интерфейс для большинства коллекций. Представляет собой группу элементов. Не гарантирует порядок или уникальность элементов.
    • List<E>: Упорядоченная коллекция (последовательность). Элементы имеют определенный индекс. Могут содержать дубликаты.
      • ArrayList<E>: Реализация на основе массива. Быстрый случайный доступ, медленные вставки/удаления в середине.
      • LinkedList<E>: Реализация на основе связного списка. Медленный случайный доступ, быстрые вставки/удаления в начале/конце.
      • Vector<E>: Устаревший синхронизированный класс. Похож на ArrayList, но потоко-безопасный (и менее производительный).
      • Stack<E>: Устаревший класс, расширяющий Vector, реализует поведение стека (LIFO).
    • Set<E>: Коллекция, содержащая уникальные элементы.
      • HashSet<E>: Реализация на основе хеш-таблицы. Неупорядоченная. Быстрые операции add, remove, contains.
      • LinkedHashSet<E>: Сохраняет порядок вставки.
      • SortedSet<E>: Набор, отсортированный по возрастанию.
        • TreeSet<E>: Реализация на основе красно-черного дерева. Гарантирует отсортированный порядок.
    • Queue<E>: Коллекция, предназначенная для хранения элементов перед обработкой, часто в порядке FIFO (First-In, First-Out).
      • PriorityQueue<E>: Реализация очереди с приоритетами. Элементы извлекаются в соответствии с их приоритетом.
      • Deque<E>: (Double Ended Queue) Двусторонняя очередь. Поддерживает операции вставки и извлечения как из начала, так и из конца.
        • ArrayDeque<E>: Реализация Deque на основе динамического массива. Быстрее, чем LinkedList для использования в качестве стека или очереди.
  • Map<K, V>: Объект, который отображает ключи на значения. Ключи уникальны, значения могут повторяться.
    • HashMap<K, V>: Реализация на основе хеш-таблицы. Неупорядоченная. Быстрые операции put, get, remove.
    • LinkedHashMap<K, V>: Сохраняет порядок вставки или порядок доступа.
    • SortedMap<K, V>: Карта, отсортированная по ключам.
      • TreeMap<K, V>: Реализация на основе красно-черного дерева. Гарантирует отсортированный порядок по ключам.
    • Hashtable<K, V>: Устаревший синхронизированный класс. Похож на HashMap, но потоко-безопасный (и менее производительный).

Основные интерфейсы:

Интерфейс Описание Порядок Уникальность Дубликаты значений
Collection Группа элементов +/- +/- Да
List Упорядоченная коллекция Да Нет Да
Set Коллекция уникальных элементов +/- Да Нет
Queue Коллекция для обработки (FIFO) Да Нет Да
Deque Двусторонняя очередь Да Нет Да
Map Ключ-значение +/- По ключу Да
SortedSet Отсортированный набор Да Да Нет
SortedMap Карта, отсортированная по ключам Да По ключу Да

Пример использования:

// Пример использования ArrayList
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice

// Пример использования HashSet
Set<Integer> uniqueNumbers = new HashSet<>();
uniqueNumbers.add(1);
uniqueNumbers.add(2);
uniqueNumbers.add(1); // Дубликат игнорируется
System.out.println(uniqueNumbers.size()); // 2

// Пример использования HashMap
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);
System.out.println(ages.get("Alice")); // 30