← Назад к вопросам

Какие есть основные группы коллекций?

1.2 Junior🔥 261 комментариев
#Коллекции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные группы коллекций в Java

Коллекции являются одной из фундаментальных частей Java Collections Framework. Они обеспечивают удобный способ работы с группами объектов. Давайте разберём основные группы коллекций, их назначение и особенности.

1. List (Списки)

List — упорядоченная коллекция, которая позволяет дублирование элементов. Доступ к элементам осуществляется по индексу.

Основные реализации:

// ArrayList — быстрый доступ, медленные вставки в начало/конец
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.get(0);

// LinkedList — быстрые вставки/удаления, медленный доступ
List<String> linkedList = new LinkedList<>();
linkedList.add("Java");

// Vector — синхронизированный ArrayList (устаревший)
List<String> vector = new Vector<>();

// CopyOnWriteArrayList — потокобезопасный, для частого чтения
List<String> copyOnWrite = new CopyOnWriteArrayList<>();

Характеристики:

  • Позволяют дублирование
  • Упорядочены (сохраняют порядок вставки)
  • Доступ по индексу
  • Предсказуемый порядок итерации

2. Set (Множества)

Set — коллекция, которая не позволяет дублирование элементов. Каждый элемент уникален.

Основные реализации:

// HashSet — быстрые операции, случайный порядок
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.contains("Java");

// LinkedHashSet — сохраняет порядок вставки
Set<String> linkedHashSet = new LinkedHashSet<>();

// TreeSet — отсортированное множество, O(log n) операции
Set<String> treeSet = new TreeSet<>();
treeSet.add("Java");
treeSet.add("Python");

// EnumSet — оптимизировано для enum типов
Set<DayOfWeek> enumSet = EnumSet.of(DayOfWeek.MONDAY, DayOfWeek.FRIDAY);

Характеристики:

  • Нет дубликатов
  • Быстрая проверка наличия элемента
  • HashSet и LinkedHashSet — O(1) для add/remove/contains
  • TreeSet — O(log n) для add/remove/contains

3. Queue (Очереди)

Queue — коллекция для работы с очередями, обычно с порядком FIFO (First In First Out).

Основные реализации:

// LinkedList реализует Queue
Queue<String> queue = new LinkedList<>();
queue.add("первый");
queue.add("второй");
String first = queue.poll(); // "первый"

// PriorityQueue — элементы с приоритетом
Queue<Integer> pq = new PriorityQueue<>();
pq.add(3);
pq.add(1);
pq.poll(); // 1 (меньший элемент имеет приоритет)

// ArrayDeque — быстрая реализация двусторонней очереди
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("первый");
deque.addLast("последний");
String first = deque.removeFirst();

// ConcurrentLinkedQueue — потокобезопасная очередь
Queue<String> concurrent = new ConcurrentLinkedQueue<>();

Характеристики:

  • Обычно FIFO порядок (кроме PriorityQueue)
  • Методы: add/offer (вставка), remove/poll (удаление), element/peek (чтение)
  • Идеальны для обработки задач в порядке очерёдности

4. Map (Отображения)

Map — коллекция пар ключ-значение. Каждый ключ уникален.

Основные реализации:

// HashMap — быстрые операции, случайный порядок
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Java", 8);
hashMap.get("Java");

// LinkedHashMap — сохраняет порядок вставки
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();

// TreeMap — отсортировано по ключам
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Java", 8);
treeMap.put("Python", 3);

// WeakHashMap — удаляет записи, когда ключ не используется
Map<String, String> weakHashMap = new WeakHashMap<>();

// Hashtable — синхронизированный HashMap (устаревший)
Map<String, Integer> hashtable = new Hashtable<>();

// ConcurrentHashMap — потокобезопасный HashMap
Map<String, Integer> concurrent = new ConcurrentHashMap<>();
conc.put("Java", 8);

Характеристики:

  • Пары ключ-значение
  • HashMap — O(1) для get/put/remove
  • TreeMap — O(log n) для операций
  • ConcurrentHashMap — потокобезопасна

5. Specialised Collections

// Collections.synchronizedList() — обёртка для синхронизации
List<String> syncList = Collections.synchronizedList(new ArrayList<>());

// Collections.unmodifiableList() — неизменяемая коллекция
List<String> unmodifiable = Collections.unmodifiableList(new ArrayList<>());

// Stream.collect(Collectors.toList()) — создание коллекции из потока
List<String> collected = stream.collect(Collectors.toList());

Сравнительная таблица

КоллекцияДубликатыУпорядоченаПотокобезопаснаОперации
ArrayListДаДаНетO(1) get, O(n) insert
LinkedListДаДаНетO(1) insert/delete
HashSetНетНетНетO(1)
LinkedHashSetНетДа (вставка)НетO(1)
TreeSetНетДа (сорт)НетO(log n)
HashMapНет (ключи)НетНетO(1)
LinkedHashMapНет (ключи)Да (вставка)НетO(1)
TreeMapНет (ключи)Да (сорт)НетO(log n)

Выбор коллекции

  • ArrayList — если нужны быстрые доступ по индексу
  • LinkedList — если часто вставляют/удаляют в начало или конец
  • HashSet — если нужно быстро проверять наличие элемента
  • TreeSet — если нужна отсортированность
  • HashMap — для отображения ключ-значение по умолчанию
  • ConcurrentHashMap — в многопоточной среде
  • PriorityQueue — когда элементы имеют приоритет