Java Collections Framework: полное руководство по эффективным структурам данных
До Java 2 использовались разрозненные классы (Dictionary, Vector, Stack, Properties). Collections Framework унифицировал их: высокая производительность, интероперабельность, лёгкое расширение.
Архитектура фреймворка
- Интерфейсы — абстрактные типы данных (Collection, List, Set, Map и др.). Иерархия интерфейсов.
- Реализации (Classes) — конкретные структуры данных (ArrayList, HashSet, TreeMap и др.).
- Алгоритмы — статические методы в классе
Collections(сортировка, поиск, перемешивание). Полиморфны: работают с любой реализацией подходящего интерфейса.
Также включает интерфейсы и классы Map (ключ/значение), интегрированные с коллекциями.
Интерфейсы коллекций
| Интерфейс | Описание |
|---|---|
Collection | Корень иерархии, работа с группами объектов |
List | Упорядоченная коллекция, допускает дубликаты |
Set | Коллекция без дубликатов |
SortedSet | Set с упорядоченными элементами |
Map | Отображение уникальных ключей в значения |
Map.Entry | Элемент map (пара ключ/значение), inner class |
SortedMap | Map с ключами в порядке возрастания |
Enumeration | Legacy интерфейс перебора, заменён Iterator |
Классы коллекций (реализации)
| Класс | Описание |
|---|---|
AbstractCollection | Базовая реализация Collection |
AbstractList | Базовая реализация List |
AbstractSequentialList | Для последовательного доступа |
LinkedList | Двусвязный список (extends AbstractSequentialList) |
ArrayList | Динамический массив (extends AbstractList) |
AbstractSet | Базовая реализация Set |
HashSet | Set на хеш-таблице (extends AbstractSet) |
LinkedHashSet | HashSet + порядок вставки |
TreeSet | Set в дереве (красно-чёрное), отсортирован |
AbstractMap | Базовая реализация Map |
HashMap | Map на хеш-таблице |
TreeMap | Map в дереве, ключи отсортированы |
WeakHashMap | Хеш-таблица со слабыми ключами |
LinkedHashMap | HashMap + порядок вставки |
IdentityHashMap | Сравнение по ссылке (==), не equals() |
Скелетные классы (Abstract*) минимизируют усилия при создании своих коллекций.
Legacy классы (java.util)
| Класс | Описание |
|---|---|
Vector | Динамический массив, синхронизирован |
Stack | LIFO стек, наследник Vector |
Dictionary | Абстрактный ключ/значение, аналог Map |
Hashtable | Синхронизированная реализация Dictionary |
Properties | Hashtable для строковых ключей/значений |
BitSet | Массив бит, динамический размер |
Алгоритмы коллекций
Статические методы класса Collections: сортировка (sort), поиск (binarySearch), перемешивание (shuffle), минимум/максимум, заполнение, копирование и др. Могут бросать ClassCastException или UnsupportedOperationException.
Константы: EMPTY_SET, EMPTY_LIST, EMPTY_MAP — неизменяемые пустые коллекции.
Итераторы (Iterator / ListIterator)
Iterator — однопроходный обход с возможностью удаления. ListIterator — двунаправленный для List, позволяет модифицировать элементы.
Компараторы (Comparator)
Интерфейс для определения порядка сортировки в TreeSet, TreeMap. Позволяет сортировать одну коллекцию разными способами и сортировать классы, которые нельзя менять.
Итог
Collections Framework даёт готовые структуры данных и алгоритмы. Интерфейсы в java.util декларируют операции, классы — реализуют. Используйте интерфейсы для типов переменных для гибкости.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Коллекции в C#: практическое руководство с реальными примерами