Учебники

Java — платформа коллекций

До 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.