Классы, создающие списки




Класс ArrayList полностью реализует интерфейс List и итератор типа iterator. Класс ArrayList очень похож на класс Vector,имеет тот же набор методов и может использоваться в тех же ситуациях.

В классе ArrayList три конструктора;

ArrayList() — создает пустой объект;

ArrayList(Collection coll) — создает объект, содержащий все элементы коллекции coll;

ArrayList(int initCapacity) — создает пустой Объект емкости initCapacity.

Единственное отличие класса ArrayList от класса vector заключается в том, что класс ArrayList не синхронизован. Это означает что одновременное изменение экземпляра этого класса несколькими подпроцессами приведет к непредсказуемым результатам.

Двунаправленный список

Класс LinkedList полностью реализует интерфейс List и содержит дополнительные методы, превращающие его в двунаправленный список. Он реализует итераторы типа Iterator и ListIterator.

Этот класс можно использовать для обpaботки элементов в стеке, деке или двунаправленном списке.

В классе LinkedList два конструктора:

LinkedList - создает пустой объект

LinkedList (Collection coll) — создает объект, содержащий все элементы коллекции coll.

Классы, создающие отображения

Класс например полностью реализует интерфейс 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.

Класс WeakHashMap отличается от класса HashMap только тем, что в его объектах неиспользуемые элементы, на которые никто не ссылается, автоматически исключаются из объекта.

Упорядоченные отображения

Класс ТrееМар полностью реализует интерфейс sortedMap. Он реализован как бинарное дерево поиска, значит его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента.

Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator.

В этом классе четыре конструктора:

ТrееМар() — создает пустой объект с естественным порядком элементов;

TreeМар(Comparator с) — создает пустой объект, в котором порядок задается объектом сравнения с;

ТrееМар(Map f) — создает объект, содержащий все элементы отображения f, с естественным порядком 'его элементов;

ТгееМар(SortedMap sf) — создает объект, содержащий все элементы отображения sf, в том же порядке.

Здесь надо пояснить, каким образом можно задать упорядоченность элементов коллекции.

Сравнение элементов коллекций

Интерфейс Comparator описывает два метода сравнения:

int compare(Object obj1, Object obj2) — возвращает отрицательное число, если objl в каком-то смысле меньше obj2; нуль, если они считаются равными; положительное число, если obj1 больше obj2. Для читателей, знакомых с теорией множеств, скажем, что этот метод сравнения обладает свойствами тождества, антисимметричности и транзитивности;

boolean equals(Object obj) — сравнивает данный объект с объектом obj, возвращая true, если объекты совпадают в каком-либо смысле, заданном этим методом.

Для каждой коллекции можно реализовать эти два метода, задав конкретный способ сравнения элементов, и определить объект класса SortedMap вторым конструктором. Элементы коллекции будут автоматически отсортированы в заданном порядке.

Следующий листинг показывает один из возможных способов упорядочения комплексных чисел — объектов класса complex. Здесь описывается класс ComplexCompare, который применяется для упорядоченного хранения множества комплексных чисел.

Листинг 6.6. Сравнение комплексных чисел

import java.util.*;

class ComplexCompare implements Comparator{

public int compare(Object obj1, Object obj2){

Complex z1 = (Complex)obj1, z2 = (Complex)obj2;

double re1 = zl.getRe(), iml = z1.get1m();

double re2 = z2.getRe(), im2 = z2.get1m();

if (rel!= re2) return (int)(re1 - re2);

else if (im1!= im2) return (int)(im1 — im2);

else return 0;

}

public boolean equals(Object z){

return compare(this, z) == 0;

}

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: