Какова иерархия Collections?qa-42

Основная структура Collections

classDiagram
    Iterable <|-- Collection
    Collection <|-- List
    Collection <|-- Set
    Collection <|-- Queue
    Set <|-- SortedSet
    SortedSet <|-- NavigableSet
    Queue <|-- Deque
    Map <|-- SortedMap
    SortedMap <|-- NavigableMap

1. Интерфейс Iterable

Корневой интерфейс, позволяющий коллекции быть целью for-each цикла.
Основной метод: iterator()

2. Основные интерфейсы коллекций

Collection

Базовый интерфейс для большинства коллекций. Основные методы:
- add(E e), remove(Object o)
- size(), isEmpty()
- contains(Object o)
- toArray()

Map

Отдельная иерархия для пар ключ-значение. Не наследует от Collection.
Основные методы:
- put(K key, V value), get(Object key)
- keySet(), values(), entrySet()

3. Основные реализации интерфейса Collection

List

Характеристики:
- Сохраняет порядок добавления
- Допускает дубликаты
- Доступ по индексу

Реализации:

ArrayList   // Динамический массив
LinkedList  // Связный список
Vector      // Устаревшая синхронизированная версия
Stack       // LIFO-структура

Set

Характеристики:
- Не допускает дубликаты
- Порядок зависит от реализации

Реализации:

HashSet         // Хэш-таблица
LinkedHashSet   // Сохраняет порядок добавления
TreeSet         // Сортировка по natural ordering

Queue

Характеристики:
- FIFO/LIFO-структуры
- Поддерживают операции вставки/извлечения

Реализации:

PriorityQueue   // Очередь с приоритетом
ArrayDeque      // Двусторонняя очередь

4. Иерархия Map

Реализации:

HashMap         // Хэш-таблица
LinkedHashMap   // Сохраняет порядок добавления
TreeMap         // Сортировка по ключам
Hashtable       // Устаревшая синхронизированная версия

5. Специализированные интерфейсы

SortedSet/SortedMap

Добавляют сортировку элементов по natural ordering или Comparator

NavigableSet/NavigableMap

Добавляют методы для навигации:
- lower(), floor(), ceiling(), higher()
- headSet(), tailSet()

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

// Для хранения тестовых данных
List<TestData> testCases = new ArrayList<>();
testCases.add(new TestData("user1", "pass1"));

// Для проверки уникальности
Set<String> uniqueIds = new HashSet<>();
assertTrue(uniqueIds.add(element.getId()));

// Для работы с очередью задач
Queue<TestTask> taskQueue = new LinkedList<>();
taskQueue.poll().execute();

Резюмируем

Основные ветви иерархии:

  1. List - упорядоченные списки (ArrayList, LinkedList)
  2. Set - уникальные элементы (HashSet, TreeSet)
  3. Queue - очереди (PriorityQueue, ArrayDeque)
  4. Map - словари (HashMap, TreeMap) - отдельная иерархия

Применение в QA:

  • ArrayList/LinkedList - хранение тестовых данных
  • HashSet/TreeSet - проверка уникальности
  • HashMap - конфигурация тестов
  • Queue - управление порядком выполнения тестов

Понимание иерархии Collections критично для:

  • Эффективной работы с тестовыми данными
  • Выбора оптимальных структур данных
  • Написания производительных автотестов
  • Анализа кода приложений