Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СТП / lec / java2014-lec-07

.pdf
Скачиваний:
6
Добавлен:
03.03.2016
Размер:
1.11 Mб
Скачать

Механизм коллекций в Java

Коллекция – иногда называемая контейнером – это обычный объект, который служит для группировки

множества элементов в единое целое.

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

данными.

Реализация механизма коллекций в ранних версиях Java

включала классы Vector, Stack, HashTable, BitSet. Однако

это не было полноценной реализацией универсального

механизма коллекций.

2

Механизм коллекций – это унифицированный метод

организации и управления данными в виде коллекций.

Все механизмы коллекций состоят из следующих

элементов:

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

2.Реализации – конкретные реализации обобщенного интерфейса коллекции.

3.Алгоритмы – методы, которые реализуют необходимые операции, для элементов коллекций.

Пример операций – поиск и сортировка.

3

Иерархия механизма коллекций

4

Collection исходная точка в иерархии механизма

коллекций. Любая коллекция представляет собой группу

объектов, которые в этом случае принято называть

элементами.

Интерфейс Collection используется в качестве «общего

знаменателя» для всех реализации коллекций и используется для прохода по элементам и управления ими с максимальной степенью обобщения.

Платформа Java не предоставляет никакой прямой реализации этого интерфейса, однако предлагает более

узконаправленные и конкретные реализации, такие как

Set и List.

5

Описание интерфейса Collection

public interface Collection<E> extends Iterable<E> {

// Базовые операции

int size ();

 

boolean isEmpty();

 

boolean contains(Object element);

 

boolean add(E element);

// опционально

boolean remove(Object element);

// опционально

Iterator<E> iterator();

 

// Групповые операции

 

boolean containsAll(Collection<?> c);

 

boolean addAll(Collection<? extends E> c);

// опционально

boolean removeAll(Collection<?> c);

// опционально

boolean retainAll(Collection<?> c);

// опционально

void clear();

// опционально

// Операции с массивами

 

Object[] toArray();

 

<T> T[] toArray(T[] a);

 

}

 

http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html 6

Проход по коллекции

Существуют два способа прохода по всем элементам

коллекции: (1) с помощью конструкции for-each и (2)

путем использования объекта Iterator.

Конструкция for-each позволяет пройти по массиву или коллекции с помощью классического цикла for:

for (Object o: collection) System.out.println(o);

7

Проход по коллекции

Iterator представляет собой объект, который позволяет

пройти по коллекции и выборочно удалить элементы,

если это необходимо. Объект Iterator может быть

получен путем вызова метода iterator().

Интерфейс Iterator имеет следующий вид:

public interface Iterator <E> { boolean hasNext();

E next();

void remove(); // опционально

}

8

Проход по коллекции

Метод hasNext возвращает true если итерация еще содержит элементы и метод

next вернет следующий элемент итерации.

Метод remove удаляет последний элемент, возвращенный методом next из коллекции. Метод remove может быть вызван только единожды на каждый вызов метода next. Если это правило нарушается – выбрасывает исключение.

При этом метод Iterator.remove является единственным безопасным способом модификации коллекции в процессе прохода; поведение итератора является неопределенным, если целевая коллекция редактируется любым другим способом в процессе итерации.

Использовать Iterator вместо for-each необходимо в случае, когда:

1.Требуется удалить текущий элемент. Конструкция for-each скрывает доступ к итератору, поэтому вызов метода remove невозможен; кроме того, foreach не подходит для фильтрования и анализа элементов.

2.Требуется параллельный проход по нескольким коллекциям.

9

Интерфейс ListIterator

http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html 10

Соседние файлы в папке lec