Коллекции
Коллекции представляют собой реализацию абстрактных типов (структур) данных, поддерживающих две основные операции:
– вставка нового элемента в коллекцию;
– удаление элемента из коллекции.
В качестве дополнительных операций могут быть реализованы следующие: создать структуру данных, просмотреть элементы, подсчитать их количество и др.
Примером коллекции является стек (структура LIFO – Last In First Out), в котором всегда удаляется объект, вставленный последним. Для очереди (структура FIFO – First In First Out) используется другое правило удаления: всегда удаляется элемент, вставляемый первым. В абстрактных типах данных существует несколько видов очередей: двусторонние очереди, кольцевые очереди, обобщенные очереди, в которых запрещены повторяющиеся элементы. Стеки и очереди могут быть реализованы как на базе массива, так и на базе связного списка.
Коллекции объединены в библиотеку классов java.utilи представляют собой контейнеры для хранения и манипулирования объектами. До появления Java 2 эта библиотека содержала классы только для работы с наиболее необходимыми структурами данных: Vector, Stack, Hashtable, BitSet, а также интерфейс Enumeration для работы с элементами этих классов. Коллекции, появившиеся в Java 2, представляют общую технологию хранения и доступа к объектам. Структура коллекций характеризует способ, с помощью которого программы Java обрабатывают группы объектов. Коллекции – это динамические массивы, связные списки, деревья, множества, хэш-таблицы, стеки, очереди. В интерфейсе Collection определены статические методы, которые работают на всех коллекциях. Другой способ работы с элементами коллекций – использование методов интерфейса Iterator, который обеспечивает средства перечисления содержимого коллекции.
Рис 11 Упрощенная иерархия классов коллекций
Интерфейсы коллекции:
Collection – вершина иерархии коллекций;
List – расширяет коллекции для обработки списков;
Set – расширяет коллекции для обработки наборов (множеств), содержащих уникальные элементы;
Map – карта отображения. Карта отображений – это объект, который хранит пару “ключ-значение”. Поиск объекта (значения) облегчается по сравнению с множествами за счет того, что его можно найти по его уникальному ключу. Если элемент с указанным ключом отсутствует в карте, то возвращается значение null.
Классы карт отображений:
AbstractMap – реализует интерфейс Map;
HashMap – расширяет AbstractMap, используя хэш-таблицу, в которой ключи отсортированы относительно значений их хэш-кодов;
TreeMap – расширяет AbstractMap, используя дерево, где ключи расположены в виде дерева поиска в строгом порядке.
Интерфейсы карт:
Map – отображает уникальные ключи и значения;
Map.Entry – описывает пару “ключ-значение”;
SortedMap – содержит отсортированные ключи.
Все классы коллекций реализуют также интерфейс Serializable.
Методы интерфейса Collection:
boolean add(Object obj) – добавляет objк вызывающей коллекции и возвращает true, если объект добавлен, и false, если obj уже элемент коллекции. Так как Object – суперкласс для всех классов, то в коллекции можно хранить объекты любого типа, кроме базовых;
boolean addAll(Collection c) – добавляет все элементы коллекции к вызывающей коллекции;
void clear() – удаляет все элементы из коллекции;
boolean contains(Object obj) – возвращает true, если вызывающая коллекция содержит элементobj;
boolean equals(Object obj) – возвращает true, если коллекции эквивалентны;
boolean isEmpty()– возвращает true, если коллекция пуста;
Iterator iterator() – извлекает итератор;
boolean remove(Object obj) – удаляет obj из коллекции;
int size() – возвращает количество элементов в коллекции;
Object[] toArray() – копирует элементы коллекции в массив объектов.
Для работы с элементами коллекции применяются следующие интерфейсы:
Comparator – для сравнения объектов;
Iterator, ListIterator, Map.Entry – для перечисления и доступа к объектам коллекции.
Интерфейс Iterator используется для доступа к элементам коллекции. Итератор располагается в коллекции между элементами.
Методы интерфейса Iterator:
Object next()– возвращает объект, на который указывает итератор, и передвигает текущий указатель на следующий итератор, предоставляя доступ к следующему элементу. Если следующий элемент коллекции отсутствует, то метод next()генерирует исключение
NoSuchElementException;
boolean hasNext()– проверяет наличие следующего элемента, а в случае его отсутствия возвращает false. Итератор при этом остается неизменным;
void remove()– удаляет объект, возвращенный последним вызовом метода next().
ИнтерфейсListIterator расширяет интерфейсIterator и предназначен в основном для работы со списками. Наличие методов
Object previous(), int previousIndex() и boolean hasPrevious() обеспечивает обратную навигацию по списку. Метод int nextIndex() возвращает номер следующего итератора. Метод void add(Object ob) позволяет вставлять элемент в список в текущую позицию. Вызов методаvoid set(Object ob) производит замену текущего элемента списка на объект, передаваемый методу в качестве параметра.
Интерфейс Map.Entry предназначен для извлечения ключей и значений карты с помощью методов getKey() и getValue() соответственно. Вызов метода setValue(Object value) заменяет значение, ассоциированное с текущим ключом.
Дата добавления: 2015-04-05; просмотров: 1041;