Коллекции

Коллекции представляют собой реализацию абстрактных типов (структур) данных, поддерживающих две основные операции:

– вставка нового элемента в коллекцию;

– удаление элемента из коллекции.

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

Примером коллекции является стек (структура 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.