Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога 2012.docx
Скачиваний:
3
Добавлен:
17.09.2019
Размер:
1.45 Mб
Скачать

Вопрос 31. Понятие и назначение итератора

В Java API введен интерфейс iterator, описывающий способ обхода всех элементов коллекции. В каждой коллекции есть метод iterator (), возвращающий реализацию интерфейса iterator для указанной коллекции. Получив эту реализацию, можно обходить коллекцию в некотором порядке, определенном данным итератором, с помощью методов, описанных в интерфейсе iteratorи реализованных в этом итераторе. Подобная техника использована в классе

StringTokenizer.

В интерфейсе iterator описаны всего три метода:

логический метод hasNext () возвращает true, если обход еще не завершен;

метод next о делает текущим следующий элемент коллекции и возвращает его в виде объекта класса object;

метод remove о удаляет текущий элемент коллекции.

Можно представить себе дело так, что итератор — это указатель на элемент коллекции. При создании итератора указатель устанавливается перед первым элементом, next()  возвращает очередной элемент коллекции, к которой «привязан» итератор (и делает его текущим). Порядок перебора определяет сам итератор.

Метод remove (), пожалуй, излишен, он уже не относится к задаче обхода коллекции, но позволяет при просмотре коллекции удалять из нее ненужные элементы.

  Порядок перебора может быть предопределенным, а может и нет. 

Создание итератора

Iterator< Тип > имя_итератора = interf . iterator () ; // Где интерфейс — только интерфейсы Set либо List

while (имя_итератора.hasNext()) // пройти по каждому элементу

System.out.println(имя_итератора.next()); // Печать каждого элемента

Элементы реализующего этот интерфейс  коллекции также можно обойти с помощью итераторов. Да, в этом интерфейсе нет метода iterator, но зато есть метод entrySet(). Этот метод вернёт нам Set, содержащий все пары ключ – значение для этой коллекции. Выглядеть это все будет так:

// Для перебора элементов словаря :

for ( Map.Entry< Тип > entry : словарь .entrySet()) // Для кажой пары, принодлежащей множеству пар.

{

System.out.print ("key = "+entry.getKey()+" value = "+entry.getValue() );

}

Вопрос 32. Сравнение элементов коллекций. Естественное и неистественное сравнение.

Естественное сравнение используется по умолчанию в ряде методов

(например, в сортировке sort) и в конструкторах, т.е. без дополнительных указаний

на метод сравнения.

Естественное отношение порядка сравнивает числа по

положению на числовой оси, символы – по числовому значению кода, строки –

лексикографически. Программист может указать, что следует использовать другой

метод сравнения (Неистественное сравнение). Для этого он должен реализовать интерфейс Comparator.

Несколько методов сравнения элементов коллекций :

contains (Object o) - находится ли указанный объект в коллекции;

containsAll (Collection name) - содержатся ли указанные объекты в коллекции.

equals (Object o) - сравнение коллекции с указанным объектом;

addAll (Collection name) — объединение;

retainAll(Collection name) — пересечение;

removeAll(Collection name) — разность;