Скачать 265.36 Kb.
|
Вложенный интерфейс Map.EntryЭтот интерфейс описывает методы работы с парами, полученными методом entrySet(): методы getKey() и getvalue() позволяют получить ключ и значение пары; метод setValue (Object value) меняет значение в данной паре. Интерфейс SortedMapИнтерфейс SortedMap , расширяющий интерфейс Map , описывает упорядоченную по ключам коллекцию мар. Сортировка производится либо в естественном порядке возрастания ключей, либо, в порядке, описываемом в интерфейсе Comparator . Элементы не нумеруются, но есть понятия большего и меньшего из двух элементов, первого, самого маленького, и последнего, самого большого элемента коллекции. Эти понятия описываются следующими методами: Comparator comparator () — возвращает способ упорядочения коллекции; Object firstKey() — возвращает первый, меньший элемент коллекции; SortedMap headMap(Object toKey) — возвращает начало коллекции до элемента с ключом toKey исключительно; Object lastKey() — возвращает последний, больший ключ коллекции; SortedMap subMap (Object fromKey, Object toKey) — возвращает часть коллекции от элемента с ключом fromKey включительно до элемента с ключом toKey исключительно; SortedMap tailMap (object fromKey) — возвращает остаток коллекции от элемента fromKey включительно. Вы можете создать свои коллекции, реализовав рассмотренные интерфейсы. Это дело трудное, поскольку в интерфейсах много методов. Чтобы облегчить эту задачу, в Java API введены частичные реализации интерфейсов — абстрактные классы-коллекции. Интерфейс IteratorВ 70—80-х годах прошлого столетия, после того как была осознана важность правильной организации данных в определенную структуру, большое внимание уделялось изучению и построению различных структур данных: связанных списков, очередей, деков, стеков, деревьев, сетей. В 90-х годах было решено заносить данные в определенную коллекцию, скрыв ее внутреннюю структуру, а для работы с данными использовать методы этой коллекции. В частности, задачу обхода возложили на саму коллекцию. В Java API введен интерфейс Iterator, описывающий способ обхода всех элементов коллекции. В каждой коллекции есть метод iterator(), возвращающий реализацию интерфейса Iterator для указанной коллекции. Получив эту реализацию, можно обходить коллекцию в некотором порядке, определенном данным итератором, с помощью методов, описанных в интерфейсе Iterator и реализованных в этом итераторе. В интерфейсе Iterator описаны всего три метода: логический метод hasNext () возвращает true , если обход еще не завершен; метод next() делает текущим следующий элемент коллекции и возвращает его в виде объекта класса Object ; метод remove() удаляет текущий элемент коллекции. Можно представить себе дело так, что итератор — это указатель на элемент коллекции. При создании итератора указатель устанавливается перед первым элементом, метод next() перемещает указатель на первый элемент и показывает его. Следующее применение метода next() перемещает указатель на второй элемент коллекции и показывает его. Последнее применение метода next () выводит указатель за последний элемент коллекции. Метод remove (), пожалуй, излишен, он уже не относится к задаче обхода коллекции, но позволяет при просмотре коллекции удалять из нее ненужные элементы. Пример 5. Использование итератора вектора Vector v = new Vector(); String s = "Строка, которую мы хотим разобрать на слова."; StringTokenizer st = new StringTokenizer(s, " \t\n\r,."); while (st.hasMoreTokens()){ // Получаем слово и заносим в вектор. v.add(st.nextToken()); // Добавляем в конец вектора } for (int i = 0; i < v.size(); i++) // Перебираем весь вектор System.out.print(v.get(i) + "."); System.out.println(); Iterator it = v.iterator (); // Получаем итератор вектора try{ while(it.hasNext()) // Пока в векторе есть элементы, System.out.println(it.next()); // выводим текущий элемент }catch(Exception e){} |