Для хранения групп объектов одинакового типа в языке программирования Java был разработан Collections Framework.
К нему были предъявлены следующие требования:
- Должен позволять работать с разными типами данных одинаково и с высокой степенью совместимости.
- Должен иметь высокую производительность и эффективно реализовывать фундаментальные структуры данных такие, как связный список, деревья, хэш-таблицы и динамические массивы.
- Должен позволять легко создавать собственные коллекции для специфических задач.
Для реализации этих целей, был разработан набор интерфейсов, на базе которых были созданы готовые коллекции, позволяющие разрабатывать коллекции собственные.
Collections Framework состоит из:
- Интерфейсов
Эти интерфейсы представляют коллекции и позволяют манипулировать данными таким образом, чтобы создавать собственные коллекции для специфичных задач. - Классов, которые реализуют интерфейсы
Конкретные имплементации интерфейсов, которые представляют собой структуры данных. - Алгоритмов
Набор методов, которые позволяют эффективно выполнять такие операции, как поиск и сортировка в структурах данных Collections Framework.
Интерфейсы
Давайте рассмотрим различные интерфейсы Collections Framework:
- Collection
Этот интерфейс позволяет нам работать с группами объектов. - List
Наследует класс Collection и является упорядоченным списком элементов. - Set
Наследует класс Collection, и содержит множество уникальных элементов. - SortedSet
Наследует Set и является упорядоченным множеством уникальных элементов. - Map
Хранит уникальные элементы типа “ключ – значение”. - Map.Entry
Описывает элемент в Map. Внутренний класс Map. - SortedMap
Расширяет класс Map, и сортирует элементы по возрастанию. - Enumeration
Интерфейс, который определяет методы для “перебора” элементов в коллекции. Заменён интерфейсом Iterator.
Классы
В языке программирования Java разработан набор стандартных классов, которые представляют базовые структуры данных. Некоторые из них являются полной реализацией и готовы к использованию, а некоторые являются лишь каркасами для будущих коллекций.
Рассмотрим их:
- AbstractCollection
Этот класс реализовывает большинство методов интерфейсов Collection. - AbstractList
Наследует класс AbstractCollection, и реализовывает большинство методов интерфейса List. - AbstractSequentialList
Наследует класс AbstractList для использования коллекции с последовательным, а не со свободным доступом к элементам. - AbstractSet
Наследует AbstractCollection и реализовывает большинство методов интерфейса Set. - AbstractMap
Реализовывает большинство методов интерфейса Map. - ArrayList (ссылка на пример)
Наследует абстрактный класс AbstractList и является реализацией динамического массива. - LinkedList (ссылка на пример)
Наследует AbstractSequentialList и является реализацией связного списка. - HashSet (ссылка на пример)
Наследует AbstractSet и является реализацией хэш-таблицы. - LinkedHashSet (ссылка на пример)
Наследует HashSet и запоминает порядок добавления элементов. - TreeSet (ссылка на пример)
Наследует AbstractSet и является реализацией красно чёрного дерева (множества уникальных элементов в виде дерева). - HashMap (ссылка на пример)
Наследует AbstractMap и является реализацией хэш-таблицы. - TreeMap (ссылка на пример)
Наследует AbstractMap для создания дерева. - WeekHashMap (ссылка на пример)
Наследует AbstractMap для использования хэш-таблицы со “слабыми” ключами. - LinkedHashMap (ссылка на пример)
Наследует HashMap для запоминания порядка добавления элементов. - IdentityHashMap (ссылка на пример)
Наследует AbstractMap и использует равенство ссылок при сравнении документов.
Collections Framework имеет несколько алгоритмов, которые могут быть применены к коллекциям и структурам, хранящим элементы типа “ключ-значение” (Maps).
Эти алгоритмы определены в виде статических методов внутри классов коллекций.
Рассмотрим сами алгоритмы и пример простого приложения с их использованием.
Перейдите по ЭТОЙ ССЫЛКЕ.
Такие структуры данных, как TreeMap и TreeSet сортируют элементы, которые хранят. Для сравнения этих элементов разработана такая сущность, как компаратор (Comaprator).
Более подробно компаратор описан на странице, перейти на которую можно по ЭТОЙ ССЫЛКЕ.
Часто мы сталкиваемся с ситуацией, когда нам необходимо отобразить все элементы нашей коллекции. Для того в языке программирования Java разработана такая сущность, как Iterator.
Iterator позволяет нам “пробежаться” по коллекции, получать и удалять элементы.
Listerator наследует Iterator и позволяет нам пробегать коллекцию в обоих направлениях, а самое главное – позволяет модифицировать элементы коллекции.
Более подробно Iterator описан на странице, перейти на которую можно по ЭТОЙ ССЫЛКЕ.
В этом уроке мы изучили основы Collections Framework. Мы рассмотрели интерфейсы, конкретные классы и алгоритмы этого модуля. Мы также разобрали примеры простых приложений с их использованием.
В следующем уроке мы изучим сериализацию объектов в языке программирования Java.