Java — Самоучитель

  • 15. Java — Массивы
  • 16. Java — Дата и время
  • 17. Java — Регулярные выражения
  • 18. Java — Методы
  • 21. Java — Вложенные и внутренние классы
  • 22. Java — Наследование
  • 23. Java — Переопределение
  • 24. Java — Полиморфизм
  • 25. Java — Абстракция
  • 26. Java — Инкапсуляция
  • 27. Java — Интерфейсы
  • 28. Java — Пакеты
  • 30.1. Java – Фреймворк коллекций

    Вплоть до Java 2, Java предоставляла особые классы, такие как Dictionary, Vector, Stack, и Properties для хранения и управления группами объектов. Хоть эти классы были полезными, им не хватало центральной, объединяющей тематики. Именно поэтому то, как вы использовали Vector отличается от того, как вы использовали Properties.

    Структура коллекций в Java была создана для того чтобы удовлетворять таким целям, как:

    • Фреймворк должен быть высокопроизводительным. Реализации фундаментальных коллекций (динамические массивы, связанные списки, деревья и хэш-таблицы) должны быть высокоэффективными.
    • Фреймворк должен позволять разным типам коллекций работать аналогичным образом и с высокой степенью совместимости.
    • Фреймворк должен уметь расширяться и/или легко адаптировать коллекцию

    С этой целью вся структура коллекций разработана вокруг набора стандартных интерфейсов. Несколько стандартных реализаций типа LinkedList, HashSet, и TreeSet из этих интерфейсов предоставляются таким образом, что вы можете их использовать «как есть» или можете реализовать свою собственную коллекцию по вашему выбору.

    Фреймворк коллекций – это объединённая архитектура для представления и управления коллекциями. Все структуры коллекций содержат в себе следующее:

    • Интерфейсы – это абстрактные типы данных, которые представляют коллекции. Интерфейсы позволяют управлять коллекциями вне зависимости от деталей их представления. В объектно-ориентированных языках интерфейсы обычно формируют иерархию.
    • Реализации, т.e. классы – Это конкретные реализации интерфейсов коллекций. По сути, они являются структурными данных, которые можно многократно использовать.
    • Алгоритмы – это методы, которые выполняют полезные вычисления с объектами, которые реализуют интерфейсы коллекций, например поиск и сортировку. Алгоритмы считаются полиморфными, то есть один и тот же метод может быть использован во множестве различных реализаций соответствующего интерфейса коллекций.

    Помимо коллекций, фреймворк определяет некоторые интерфейсы и классы карт. Карты хранят пары ключ/значение. Хоть карты не являются коллекциями в обычном их понимании, но они полностью интегрированы с коллекциями.

    Интерфейсы коллекций

    Структура коллекций определяет некоторые интерфейсы в Java. Этот раздел вкратце описывает каждый из них.

    Интерфейс и описание
    1Интерфейс Collection
    Позволяет работать с группами объектов; находится на вершине иерархии коллекций.
    2Интерфейс List
    Расширяет Collection и экземпляр List хранит упорядоченный набор элементов.
    3Set
    Расширяет Collection, чтобы обрабатывать наборы, которые должны содержать уникальные элементы.
    4SortedSet
    Расширяет Set для обработки отсортированных наборов.
    5Map
    Привязывает уникальные ключи к значениям
    6Map.Entry
    Описывает элемент (пара ключ/значение) в карте. Это внутренний класс Map.
    7SortedMap
    Расширяет Map так, чтобы ключи были расположены в порядке возрастания.
    8Enumeration
    Устаревший интерфейс, определяющий методы, которым вы можете перечислить (получать по одному за раз) элементы в коллекции объектов. Этот устаревший интерфейс был заменен Iterator

    Классы коллекций

    Java предоставляет набор стандартных классов коллекции, которые реализуют интерфейсы Collection. Некоторые из классов предоставляют полные реализации, которые могут быть использованы как есть, а другие являются абстрактным классом, предоставляя скелетные реализации, которые используются как начальные точки для создания конкретных коллекций.

    Стандартные классы коллекций в Java приведены в следующей таблице:

    Класс и описание
    1AbstractCollection
    Реализует большую часть интерфейса Collection
    2AbstractList
    Расширяет AbstractCollection и реализует большую часть интерфейса List
    3AbstractSequentialList
    Расширяет AbstractList для использований коллекцией, которая использует последовательный, а не произвольный доступ к своим элементам.
    4LinkedList
    Реализует связанный список, расширяя AbstractSequentialList.
    5ArrayList
    Реализует динамический массив, расширяя AbstractList
    6AbstractSet
    Расширяет AbstractCollection и реализует большую часть интерфейса Set.
    7HashSet
    Расширяет AbstractSet для использования в хэш-таблице
    8LinkedHashSet
    Расширяет HashSet, чтобы разрешить итерации порядка вставки.
    9TreeSet
    Реализует набор, хранящийся в дереве. Расширяет AbstractSet.
    10AbstractMap
    Реализует большую часть интерфейса Map.
    11HashMap
    Расширяет AbstractMap для использования хэш-таблицы
    12TreeMap
    Расширяет AbstractMap для использования дерева.
    13WeakHashMap
    Расширяет AbstractMap для использования хеш-таблицы со слабыми ключами.
    14LinkedHashMap
    Расширяет HashMap, чтобы разрешить итерации порядка вставки.
    15IdentityHashMap
    Расширяет AbstractMap и использует равенство ссылок при сравнении документов.

    Классы AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList и AbstractMap предоставляют скелетные реализации интерфейсов основной коллекции в Java, чтобы свести к минимуму усилия, необходимые для их реализации.

    Следующие устаревшие классы, определённые java.util, обсуждались в предыдущей главе:

    Класс и описание
    1Vector
    Реализует динамический массив. Схож с ArrayList, но с некоторыми отличиями.
    2Stack
    Stack – это подкласс Vector, который реализует стандартный стэк «последним пришёл — первым ушёл».
    3Dictionary
    Dictionary – это абстрактный класс, который представляет собой хранилище ключей/значений и работает так же, как и Map.
    4Hashtable
    Hashtable был частью оригинального java.util и является конкретной реализацией Dictionary.
    5Properties
    Properties – это подкласс Hashtable. Он используется для хранения списков значений, в которых ключ является строкой, и значение тоже является строкой.
    6BitSet
    Класс BitSet создает специальный тип массива, который содержит значения бит. Этот массив может увеличиваться в размерах при необходимости.

    Алгоритмы коллекции

    Структура коллекций определяет несколько алгоритмов, которые могут применяться к коллекциям и картам. Эти алгоритмы определяются как статические методы в классе Collections.

    Некоторые из методов могут генерировать ClassCastException, которое возникает при попытке сравнить несовместимые типы или UnsupportedOperationException, которое возникает, когда предпринимается попытка изменить немодифицируемую коллекцию.

    Коллекции определяют три статические переменные: EMPTY_SET, EMPTY_LIST и EMPTY_MAP. Все неизменны.

    Алгоритм и описание
    1Алгоритмы Collection
    Вот список всех реализаций алгоритма.

    Как использовать итератор коллекции в Java?

    Вы будете часто хотеть циклически перемещаться по элементам в коллекции. Например, вы захотите отобразить каждый элемент.

    Легчайший способ это сделать – использовать итератор, который является объектом, который реализует интерфейс Iterator или ListIterator.

    Iterator позволяет вам перемещаться по коллекции, получать или удалять элементы. ListIterator расширяет Iterator, чтобы обеспечить двунаправленный обход списка и модификацию элементов.

    Метод Iterator и описание
    1Использование Iterator в Java
    Вот список всех методов с примерами, предоставляемыми интерфейсами Iterator и ListIterator.

    Как использовать компаратор?

    И TreeSet, и TreeMap хранят элементы в отсортированном порядке. Однако, именно компаратор определяет, что такое отсортированный порядок.

    Этот интерфейс позволяет нам сортировать данную коллекцию любым количеством различных способов. Также этот интерфейс может использоваться для сортировки любых экземпляров любого класса (даже классов, которые мы не можем изменить).

    Метод Comparator и описание
    1Использование Comparator в Java
    Вот список всех методов с примерами, предоставляемыми интерфейсом Comparator.

    Итог

    Структура коллекций Java даёт программисту доступ к предварительно упакованным структурам данных, а также к алгоритмам для их управления.

    Коллекция – это объект, который может содержать ссылки на другие объекты. Интерфейсы коллекции объявляют операции, которые могут выполняться для каждого типа коллекции.

    Классы и интерфейсы структуры коллекций находятся в java.util.

    Поделитесь:

    О сайте

    Все материалы сайта proglang.su являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт proglang.su запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону. Мы это делаем, чтобы защитить плоды своих трудов от воровства. © 2014-2019

    Присоединяйтесь


    Обратная связь