Классы, создающие множества. Упорядоченные множества.
Класс HashSet полностью реализует интерфейс set и итератор типа iterator. Класс Hashset используется в тех случаях, когда надо хранить только одну копию каждого элемента.
В классе HashSet четыре конструктора:
- Hashset () – создает пустой объект с показателем загруженности 0.75;
- HashSet (int capacity) – создает пустой объект с начальной емкостью capacity и показателем загруженности 0.75;
- HashSet (int capacity, float loadFactor) – создает пустой объект с начальной емкостью capacity и показателем загруженности loadFactor;
- HashSet (Collection coll) – создает объект, содержащий все элементы коллекции coll, с емкостью, равной удвоенному числу элементов коллекции coll, но не менее 11, и показателем загруженности 0.75.
Упорядоченные множества
Класс TreeSet полностью реализует интерфейс sortedset и итератор типа iterator. Класс TreeSet реализован как бинарное дерево поиска, значит, его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента.
Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator.
Этот класс удобен при поиске элемента во множестве, например, для проверки, обладает ли какой-либо элемент свойством, определяющим множество.
В классе TreeSet четыре конструктора:
- TreeSet () – создает пустой объект с естественным порядком элементов;
- TreeSet (Comparator с) – создает пустой объект, в котором порядок задается объектом сравнения с;
- TreeSet (Collection coll) – создает объект, содержащий все элементы коллекции coll, с естественным порядком ее элементов;
- TreeSet (SortedMap sf) – создает объект, содержащий все элементы отображения sf, в том же порядке.
В листинге 6.7 показано, как можно хранить комплексные числа в упорядоченном виде. Порядок задается объектом класса ComplexCompare, определенного в листинге 6.6.
Листинг 6.7. Хранение комплексных чисел в упорядоченном виде.
TreeSet ts = new TreeSet (new ComptexCompare()); ts.add(new Complex(1.2, 3.4)); ts .add (new Complex (-1.25, 33.4"; ts.add(new Complex(1.23, – 3.45)); ts.add(new Complex(16.2, 23.4)); Iterator it = ts.iterator(); while(it.hasNext()), ((Complex)it.next()).pr();