До Java 2 Java предоставляла специальные классы, такие как Dictionary, Vector, Stack и Properties, для хранения и управления группами объектов. Хотя эти занятия были весьма полезны, им не хватало центральной объединяющей темы. Таким образом, способ, которым вы использовали Vector, отличался от того, как вы использовали Properties.
Структура коллекций была разработана для достижения нескольких целей, таких как —
-
Фреймворк должен был быть высокопроизводительным. Реализации для базовых коллекций (динамические массивы, связанные списки, деревья и хеш-таблицы) должны были быть очень эффективными.
-
Структура должна была позволять различным типам коллекций работать одинаково и с высокой степенью взаимодействия.
-
Каркас должен был легко расширять и / или адаптировать коллекцию.
Фреймворк должен был быть высокопроизводительным. Реализации для базовых коллекций (динамические массивы, связанные списки, деревья и хеш-таблицы) должны были быть очень эффективными.
Структура должна была позволять различным типам коллекций работать одинаково и с высокой степенью взаимодействия.
Каркас должен был легко расширять и / или адаптировать коллекцию.
С этой целью вся структура коллекций разработана на основе набора стандартных интерфейсов. Предусмотрено несколько стандартных реализаций этих интерфейсов, таких как LinkedList, HashSet и TreeSet , которые вы можете использовать как есть, и вы также можете реализовать свою собственную коллекцию, если захотите.
Каркас коллекций — это унифицированная архитектура для представления коллекций и управления ими. Все рамки коллекций содержат следующее —
-
Интерфейсы — это абстрактные типы данных, которые представляют коллекции. Интерфейсы позволяют манипулировать коллекциями независимо от деталей их представления. В объектно-ориентированных языках интерфейсы обычно образуют иерархию.
-
Реализации, т. Е. Классы — это конкретные реализации интерфейсов коллекции. По сути, они являются структурами данных многократного использования.
-
Алгоритмы — это методы, которые выполняют полезные вычисления, такие как поиск и сортировка, для объектов, которые реализуют интерфейсы коллекции. Говорят, что алгоритмы полиморфны: один и тот же метод может использоваться во многих различных реализациях соответствующего интерфейса коллекции.
Интерфейсы — это абстрактные типы данных, которые представляют коллекции. Интерфейсы позволяют манипулировать коллекциями независимо от деталей их представления. В объектно-ориентированных языках интерфейсы обычно образуют иерархию.
Реализации, т. Е. Классы — это конкретные реализации интерфейсов коллекции. По сути, они являются структурами данных многократного использования.
Алгоритмы — это методы, которые выполняют полезные вычисления, такие как поиск и сортировка, для объектов, которые реализуют интерфейсы коллекции. Говорят, что алгоритмы полиморфны: один и тот же метод может использоваться во многих различных реализациях соответствующего интерфейса коллекции.
В дополнение к коллекциям платформа определяет несколько интерфейсов и классов карты. Карты хранят пары ключ / значение. Хотя карты не являются коллекциями в правильном использовании этого термина, но они полностью интегрированы с коллекциями.
Коллекция интерфейсов
Каркас коллекций определяет несколько интерфейсов. В этом разделе представлен обзор каждого интерфейса —
Sr.No. | Интерфейс и описание |
---|---|
1 | Интерфейс Коллекции
Это позволяет вам работать с группами объектов; это находится наверху иерархии коллекций. |
2 | Интерфейс списка
Это расширяет коллекцию, а экземпляр List хранит упорядоченную коллекцию элементов. |
3 | Набор
Это расширяет коллекцию для обработки наборов, которые должны содержать уникальные элементы. |
4 | SortedSet
Это расширяет набор для обработки отсортированных наборов. |
5 | Карта
Это сопоставляет уникальные ключи со значениями. |
6 | Карта. Вход
Это описывает элемент (пара ключ / значение) в карте. Это внутренний класс Map. |
7 | Сортированная карта
Это расширяет карту, так что ключи поддерживаются в порядке возрастания. |
8 | Перечисление
Это устаревший интерфейс, определяющий методы, с помощью которых вы можете перечислять (получать по одному) элементы в коллекции объектов. Этот устаревший интерфейс был заменен Iterator. |
Это позволяет вам работать с группами объектов; это находится наверху иерархии коллекций.
Это расширяет коллекцию, а экземпляр List хранит упорядоченную коллекцию элементов.
Это расширяет коллекцию для обработки наборов, которые должны содержать уникальные элементы.
Это расширяет набор для обработки отсортированных наборов.
Это сопоставляет уникальные ключи со значениями.
Это описывает элемент (пара ключ / значение) в карте. Это внутренний класс Map.
Это расширяет карту, так что ключи поддерживаются в порядке возрастания.
Это устаревший интерфейс, определяющий методы, с помощью которых вы можете перечислять (получать по одному) элементы в коллекции объектов. Этот устаревший интерфейс был заменен Iterator.
Коллекционные классы
Java предоставляет набор стандартных классов коллекции, которые реализуют интерфейсы Коллекции. Некоторые из классов предоставляют полные реализации, которые можно использовать как есть, а другие являются абстрактным классом, предоставляя скелетные реализации, которые используются в качестве отправных точек для создания конкретных коллекций.
Стандартные классы коллекции представлены в следующей таблице:
Sr.No. | Класс и описание |
---|---|
1 |
AbstractCollection Реализует большую часть интерфейса коллекции. |
2 |
AbstractList Расширяет AbstractCollection и реализует большую часть интерфейса List. |
3 |
AbstractSequentialList Расширяет AbstractList для использования коллекцией, которая использует последовательный, а не произвольный доступ к своим элементам. |
4 | LinkedList
Реализует связанный список, расширяя AbstractSequentialList. |
5 | ArrayList
Реализует динамический массив путем расширения AbstractList. |
6 |
AbstractSet Расширяет AbstractCollection и реализует большую часть интерфейса Set. |
7 | HashSet
Расширяет AbstractSet для использования с хеш-таблицей. |
8 | LinkedHashSet
Расширяет HashSet, чтобы разрешить итерации порядка вставки. |
9 | TreeSet
Реализует набор, хранящийся в дереве. Расширяет AbstractSet. |
10 |
AbstractMap Реализует большую часть интерфейса карты. |
11 | HashMap
Расширяет AbstractMap для использования хэш-таблицы. |
12 | TreeMap
Расширяет AbstractMap для использования дерева. |
13 | WeakHashMap
Расширяет AbstractMap для использования хеш-таблицы со слабыми ключами. |
14 | LinkedHashMap
Расширяет HashMap, чтобы разрешить итерации порядка вставки. |
15 | IdentityHashMap
Расширяет AbstractMap и использует равенство ссылок при сравнении документов. |
AbstractCollection
Реализует большую часть интерфейса коллекции.
AbstractList
Расширяет AbstractCollection и реализует большую часть интерфейса List.
AbstractSequentialList
Расширяет AbstractList для использования коллекцией, которая использует последовательный, а не произвольный доступ к своим элементам.
Реализует связанный список, расширяя AbstractSequentialList.
Реализует динамический массив путем расширения AbstractList.
AbstractSet
Расширяет AbstractCollection и реализует большую часть интерфейса Set.
Расширяет AbstractSet для использования с хеш-таблицей.
Расширяет HashSet, чтобы разрешить итерации порядка вставки.
Реализует набор, хранящийся в дереве. Расширяет AbstractSet.
AbstractMap
Реализует большую часть интерфейса карты.
Расширяет AbstractMap для использования хэш-таблицы.
Расширяет AbstractMap для использования дерева.
Расширяет AbstractMap для использования хеш-таблицы со слабыми ключами.
Расширяет HashMap, чтобы разрешить итерации порядка вставки.
Расширяет AbstractMap и использует равенство ссылок при сравнении документов.
Классы AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList и AbstractMap предоставляют скелетные реализации интерфейсов базовой коллекции, чтобы минимизировать усилия, необходимые для их реализации.
Следующие унаследованные классы, определенные java.util, обсуждались в предыдущей главе:
Sr.No. | Класс и описание |
---|---|
1 | Вектор
Это реализует динамический массив. Он похож на ArrayList, но с некоторыми отличиями. |
2 | стек
Стек является подклассом Vector, который реализует стандартный стек «первым пришел — первым вышел». |
3 | толковый словарь
Словарь — это абстрактный класс, который представляет хранилище ключей / значений и работает так же, как и Map. |
4 | Хеш-таблица
Hashtable был частью оригинального java.util и является конкретной реализацией словаря. |
5 | свойства
Свойства является подклассом Hashtable. Он используется для ведения списков значений, в которых ключ является строкой, а значение также является строкой. |
6 | BitSet
Класс BitSet создает специальный тип массива, который содержит значения битов. Этот массив может увеличиваться в размере по мере необходимости. |
Это реализует динамический массив. Он похож на ArrayList, но с некоторыми отличиями.
Стек является подклассом Vector, который реализует стандартный стек «первым пришел — первым вышел».
Словарь — это абстрактный класс, который представляет хранилище ключей / значений и работает так же, как и Map.
Hashtable был частью оригинального java.util и является конкретной реализацией словаря.
Свойства является подклассом Hashtable. Он используется для ведения списков значений, в которых ключ является строкой, а значение также является строкой.
Класс BitSet создает специальный тип массива, который содержит значения битов. Этот массив может увеличиваться в размере по мере необходимости.
Алгоритмы сбора
Каркас коллекций определяет несколько алгоритмов, которые можно применять к коллекциям и картам. Эти алгоритмы определены как статические методы в классе Collections.
Некоторые из методов могут генерировать исключение ClassCastException , возникающее при попытке сравнить несовместимые типы, или исключение UnsupportedOperationException , возникающее при попытке изменить неизменяемую коллекцию.
Коллекции определяют три статические переменные: EMPTY_SET, EMPTY_LIST и EMPTY_MAP. Все неизменны.
Sr.No. | Алгоритм и описание |
---|---|
1 | Алгоритмы сбора
Вот список всех реализаций алгоритма. |
Вот список всех реализаций алгоритма.
Как использовать итератор?
Часто вам захочется перебрать элементы коллекции. Например, вы можете отобразить каждый элемент.
Самый простой способ сделать это — использовать итератор, который является объектом, реализующим интерфейс Iterator или ListIterator.
Итератор позволяет циклически проходить через коллекцию, получать или удалять элементы. ListIterator расширяет Iterator, чтобы разрешить двунаправленный обход списка и модификацию элементов.
Sr.No. | Метод итератора и описание |
---|---|
1 | Использование Java Iterator
Вот список всех методов с примерами, предоставленными интерфейсами Iterator и ListIterator. |
Вот список всех методов с примерами, предоставленными интерфейсами Iterator и ListIterator.
Как использовать компаратор?
TreeSet и TreeMap хранят элементы в отсортированном порядке. Однако именно компаратор точно определяет, что означает отсортированный порядок .
Этот интерфейс позволяет нам сортировать данную коллекцию любым количеством различных способов. Также этот интерфейс может использоваться для сортировки любых экземпляров любого класса (даже классов, которые мы не можем изменить).
Sr.No. | Метод итератора и описание |
---|---|
1 | Использование Java Comparator
Вот список всех методов с примерами, предоставленными интерфейсом Comparator. |
Вот список всех методов с примерами, предоставленными интерфейсом Comparator.
Резюме
Инфраструктура коллекций Java предоставляет программисту доступ к предварительно упакованным структурам данных, а также к алгоритмам управления ими.
Коллекция — это объект, который может содержать ссылки на другие объекты. Интерфейсы коллекции объявляют операции, которые могут быть выполнены для каждого типа коллекции.
Классы и интерфейсы каркаса коллекций находятся в пакете java.util.