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

Какая иерархия коллекций в Java?

2.0 Middle🔥 151 комментариев
#Java

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

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

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

Иерархия коллекций в Java

Общая структура

Все коллекции в Java наследуют от интерфейса Iterable, через который можно итерироваться.

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

Collection — базовый интерфейс для всех коллекций (кроме Map):

Iterable
  └── Collection
       ├── List
       ├── Set
       └── Queue

List (Список)

Упорядоченная коллекция, доступ по индексу:

List<String> list = new ArrayList<>();  // Динамический массив
list = new LinkedList<>();               // Связный список
list = new Vector<>();                   // Потокобезопасный список
list = new Stack<>();                    // Стек (LIFO)

list.add("John");      // Добавить
list.get(0);            // Получить по индексу
list.remove(0);         // Удалить
list.size();            // Размер

Реализации:

  • ArrayList — быстрый доступ, медленное удаление
  • LinkedList — быстрое удаление, медленный доступ
  • Vector — потокобезопасный (устарел)
  • Stack — стек (LIFO)

Set (Множество)

Без дубликатов, быстрая проверка принадлежности:

Set<String> set = new HashSet<>();    // Без порядка, быстро
set = new LinkedHashSet<>();          // Сохраняет порядок
set = new TreeSet<>();                // Отсортировано

set.add("apple");     // Добавить
set.contains("apple"); // Проверить
set.remove("apple");   // Удалить

Реализации:

  • HashSet — быстрая проверка O(1)
  • LinkedHashSet — сохраняет порядок вставки
  • TreeSet — отсортировано по comparator

Queue (Очередь)

FIFO (First In First Out) порядок:

Queue<String> queue = new LinkedList<>();
queue = new PriorityQueue<>();  // По приоритету

queue.add("first");    // Добавить
queue.poll();           // Получить и удалить
queue.peek();           // Получить без удаления

Реализации:

  • LinkedList — обычная очередь
  • PriorityQueue — по приоритету

Map (Словарь)

Пары ключ-значение (не наследует Collection!):

Map<String, Integer> map = new HashMap<>();      // Без порядка
map = new LinkedHashMap<>();                     // Сохраняет порядок
map = new TreeMap<>();                           // Отсортировано
map = new Hashtable<>();                         // Потокобезопасный

map.put("age", 30);           // Добавить
map.get("age");               // Получить
map.remove("age");            // Удалить
map.containsKey("age");       // Проверить ключ
map.values();                  // Все значения
map.keySet();                  // Все ключи
map.entrySet();               // Пары ключ-значение

Реализации:

  • HashMap — быстрый поиск O(1)
  • LinkedHashMap — сохраняет порядок вставки
  • TreeMap — отсортировано по ключам
  • Hashtable — потокобезопасный (устарел)

Полная диаграмма

Iterable
  │
  ├─ Collection
  │  ├─ List (упорядоченная)
  │  │  ├─ ArrayList
  │  │  ├─ LinkedList
  │  │  ├─ Vector
  │  │  └─ Stack
  │  │
  │  ├─ Set (без дубликатов)
  │  │  ├─ HashSet
  │  │  ├─ LinkedHashSet
  │  │  └─ TreeSet
  │  │
  │  └─ Queue (очередь)
  │     ├─ LinkedList
  │     └─ PriorityQueue
  │
  └─ Map (ключ-значение)
     ├─ HashMap
     ├─ LinkedHashMap
     ├─ TreeMap
     └─ Hashtable

Используется в тестировании

import org.junit.Test;
import static org.junit.Assert.*;

public class CollectionsTest {
    @Test
    public void testList() {
        List<String> list = new ArrayList<>();
        list.add("John");
        list.add("Jane");
        assertEquals(2, list.size());
        assertEquals("John", list.get(0));
    }
    
    @Test
    public void testSet() {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("apple");  // Дубликат
        assertEquals(1, set.size());  // Только одно значение
    }
    
    @Test
    public void testMap() {
        Map<String, Integer> map = new HashMap<>();
        map.put("John", 30);
        map.put("Jane", 25);
        assertEquals(Integer.valueOf(30), map.get("John"));
        assertTrue(map.containsKey("Jane"));
    }
}

Производительность

КоллекцияДобавлениеУдалениеПоиск
ArrayListO(1)O(n)O(n)
LinkedListO(1)O(1)O(n)
HashSetO(1)O(1)O(1)
TreeSetO(log n)O(log n)O(log n)
HashMapO(1)O(1)O(1)
TreeMapO(log n)O(log n)O(log n)

Итерация

List<String> list = Arrays.asList("John", "Jane", "Bob");

// for-each
for (String name : list) {
    System.out.println(name);
}

// Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

// Stream API (Java 8+)
list.forEach(System.out::println);
list.stream()
    .filter(name -> name.startsWith("J"))
    .forEach(System.out::println);

Для QA в Java тестировании: используй ArrayList для большинства случаев, HashMap для поиска по ключу, HashSet для проверки уникальности.