Пример 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; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!