Пример 4.4. Использование итератора вектора
Vector v = new Vector();
…….
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){}
Интерфейс Listlterator. Интерфейс ListIterator расширяет интерфейс Iterator, обеспечивая перемещение по коллекции, как в прямом, так и в обратном направлении. Он может быть реализован только в тех коллекциях, в которых есть понятия следующего и предыдущего элемента и где элементы пронумерованы.
В интерфейс ListIterator добавлены следующие методы:
void add(Object element) — добавляет элемент element перед текущим элементом;
boolean hasPrevious() — возвращает true, если в коллекции есть элементы, стоящие перед текущим элементом;
int nextIndex() — возвращает индекс текущего элемента; если текущим является последний элемент коллекции, возвращает размер коллекции;
Object previous() — возвращает предыдущий элемент и делает его текущим;
int previous index() — возвращает индекс предыдущего элемента;
void set(Object element) —заменяет текущий элемент элементом element; выполняется сразу после next() или previous().
Как видите, итераторы могут изменять коллекцию, в которой они работают, добавляя, удаляя и заменяя элементы. Чтобы это не приводило к конфликтам, предусмотрена исключительная ситуация, возникающая при попытке использования итераторов параллельно "родным" методам коллекции. Именно поэтому в примере 4.4 действия с итератором заключены в блок try-catch().
|
|
ListIterator lit = v.listIterator(); // Получаем итератор вектора
try {
while(lit.hasNext()) // Пока в векторе есть элементы
// Переходим к следующему элементу и выводим его
System.out.println(lit.next());
// Теперь указатель за концом вектора. Пройдем к началу
while (lit. hasPrevious ())
System.out.println(lit. previous());
}
catch (Exception e){}
В составе Java API есть полностью реализованные классы-коллекции помимо уже рассмотренных классов Vector, Stack, Hashtable и Properties. Это классы ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap и другие.
Классы, наследующие интерфейс List. Класс ArrayList очень похож на класс Vector, имеет тот же набор методов и может использоваться в тех же ситуациях.
В классе ArrayList три конструктора:
ArrayList()—создает пустой объект;
ArrayList(Collection coll) — создает объект, содержащий все элементы коллекции coll;
ArrayList(int initCapacity) — создает пустой объект емкости initCapacity.
Единственное отличие класса ArrayList от класса Vector заключается в том, что класс ArrayList не синхронизован. Это означает, что одновременное изменение экземпляра этого класса несколькими подпроцессами приведет к непредсказуемым результатам.
Класс LinkedList полностью реализует интерфейс List и содержит дополнительные методы, превращающие его в двунаправленный список. Он реализует итераторы типа Iterator и ListIterator.
|
|
Этот класс можно использовать для обработки элементов в стеке или двунаправленном списке.
В классе LinkedList два конструктора:
LinkedList() - создает пустой объект
LinkedList(Collection coll) — создает объект, содержащий все элементы коллекции coll.
Классы, создающие отображения. Класс HashMap полностью реализует интерфейс Map, а также итератор типа Iterator. Класс HashMap очень похож на класс Hashtable и может использоваться в тех же ситуациях. Он имеет тот же набор функций и такие же конструкторы:
HashMap() — создает пустой объект с показателем загруженности 0,75;
НаshМар(int capacity) - создает пустой объект с начальной емкостью capacity и показателем загруженности 0,75;
HashMap(int capacity, float loadFactor) — создает пустой объект С начальной емкостью capacity и показателем загруженности loadFactor ;
HashMap(Map f) — создает объект класса HashMap, содержащий все элементы отображения f, с емкостью, равной удвоенному числу элементов отображения f, но не менее 11, и показателем загруженности 0,75.
Упорядоченные отображения. Класс ТгееМар полностью реализует интерфейс SortedMap. Он реализован как бинарное дерево поиска, следовательно, его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента. Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator.
|
|
В этом классе четыре конструктора:
ТгееМар() — создает пустой объект с естественным порядком элементов;
TreeМар(Comparator с) — создает пустой объект, в котором порядок задается объектом сравнения с;
ТгееМар Map f) — создает объект, содержащий все элементы отображения f, с естественным порядком его элементов;
ТгееМар(SortedMap sf) — создает объект, содержащий все элементы отображения sf, в том же порядке.
Дата добавления: 2018-04-15; просмотров: 246; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!