АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

TreeSet()

TreeSet(Collection <? extends E> c)

TreeSet(Comparator <? super E> c)

TreeSet(SortedSet <E> s)

Класс TreeSet<E> содержит методы по извлечению первого и последнего (наименьшего и наибольшего) элементов E first() и E last(). Методы SortedSet<E> subSet(E from, E to),

SortedSet<E> tailSet(E from)

и SortedSet<E> headSet(E to)

предназначены для извлечения определенной части множества. Метод
Comparator <? super E> comparator() возвращает объект
Comparator, используемый для сортировки объектов множества или null, если выполняется обычная сортировка.

/* пример # 10: создание множества из списка и его методы: DemoTreeSet.java */

package chapt10;

import java.util.*;

 

public class DemoTreeSet {

public static void main(String[] args) {

ArrayList<String> c = new ArrayList<String>();

boolean b;

for (int i = 0; i < 6; i++)

c.add((int) (Math. random () * 71) + "Y ");

System. out. println(c + "список");

TreeSet<String> set = new TreeSet<String>(c);

System. out. println(set + "множество");

b = set.add("5 Element"); // добавление(b=true)

b = set.add("5 Element"); // добавление(b=false)

// после добавления

System. out. println(set + "add");

System. out. println(set.comparator()); //null!!!

// извлечение наибольшего и наименьшего элементов

System. out. println(set.last() + " "

+ set.first());

}

}

В результате может быть выведено:

[44Y, 56Y, 49Y, 26Y, 49Y, 2Y ]список

[2Y, 26Y, 44Y, 49Y, 56Y ]множество

[2Y, 26Y, 44Y, 49Y, 5 Element, 56Y ]add

Null

Y 2Y

Множество инициализируется списком и сортируется сразу же в процессе создания. После добавления нового элемента производится неудачная попытка добавить его повторно. С помощью итератора элемент может быть найден и удален из множества. Для множества, состоящего из обычных строк, используется по умолчанию правило обычной лексикографической сортировки, поэтому метод comparator() возвращает null.

Если попытаться заменить тип String на StringBuilder или
StringBuffer, то создать множество TreeSet так просто не удастся. Решением такой задачи будет создание нового класса с полем типа StringBuilder и реализацией интерфейса Comparable<T> вида:

/* пример # 11:пользовательский класс, объект которого может быть добавлен в множество TreeSet: Message.java */

package chapt10;

import java.util.*;

public class Message implements Comparable<Message> {

private StringBuilder str;

private int idSender;

 

public Message(StringBuilder s, int id) {

super ();

this. str = s;

idSender = id;

}

public String getStr() {

return str.toString();

}

public int getId() {

return idSender;

}

public int compareTo(Message a0) {

return (idSender - a0.getId());

}

}

Предлагаемое решение универсально для любых пользовательских типов.

Абстрактный класс EnumSet<E extends Enum<E>> наследуется от абстрактного класса AbstractSet. Специально реализован для работы с типами enum. Все элементы такой коллекции должны принадлежать единственному типу enum, определенному явно или неявно. Внутренне множество представимо в виде вектора битов, обычно единственного long. Множества нумераторов поддерживают перебор по диапазону из нумераторов. Скорость выполнения операций над таким множеством очень высока, даже если в ней участвует большое количество элементов.

Создать объект этого класса можно только с помощью статических методов. Метод EnumSet<E> noneOf(Class<E> elemType) cоздает пустое множество нумерованных констант с указанным типом элемента, метод
allOf(Class<E> elementType) создает множество нумерованных констант, содержащее все элементы указанного типа. Метод of(E first, E... rest) создает множество, первоначально содержащее указанные элементы.
С помощью метода complementOf(EnumSet<E> s) создается множество, содержащее все элементы, которые отсутствуют в указанном множестве. Метод range(E from, E to) создает множество из элементов, содержащихся в диапазоне, определенном двумя элементами. При передаче вышеуказанным методам в качестве параметра null будет сгенерирована исключительная ситуация NullPointerException.

/* пример # 12: иcпользование множества enum-типов: UseEnumSet.java */

package chapt10;

import java.util.EnumSet;

 

enum Faculty{ FFSM, MMF, FPMI, FMO, GEO }

 

public class UseEnumSet {

public static void main(String[] args) {

/*множество set1 содержит элементы типа enum из интервала,

определенного двумя элементами*/

EnumSet <Faculty> set1 =

EnumSet. range (Faculty. MMF, Faculty. FMO);

/*множество set2 будет содержать все элементы, не содержащиеся
в множестве set1*/

EnumSet <Faculty> set2 =

EnumSet. complementOf (set1);

System. out. println(set1);

System. out. println(set2);

}

}

В результате будет выведено:

[MMF, FPMI, FMO]

[FFSM, GEO]

В следующем примере показано использование интерфейса NavigableSet. Метод first() возвращает первый элемент из множества. Метод subSet(E fromElement, E toElement) возвращает список элементов, находящихся между fromElement и toElement, причем последний не включается. Методы headSet(E element) и tailSet(E element, boolean inclusive) возвращают то множество элементов, которое меньше либо больше element соответственно. Если inclusive равно true, то элемент включается в найденное множество и не включается в противном случае.

/* пример # 13: иcпользование множества NavigableSet: NavigableSetTest.java */

package chapt10;

import java.util.*;

 

public class NavigableSetTest {

public static void main(String[] args) {

HashSet<String> city = new HashSet<String>();

city.add("Minsk");

city.add("Mosсow");

city.add("Polotsk");

city.add("Brest");

NavigableSet<String> ns = new TreeSet<String>(city);

System. out. println("All: " + ns);

System. out. println("First: " + ns.first());

System. out. println("Between Minsk and Polotsk: "

+ ns.subSet("Minsk","Polotsk"));

System. out. println("Before Minsk: "

+ ns.headSet("Minsk"));

System. out. println("After Minsk: "

+ ns.tailSet("Minsk", false));

}

}

В результате на консоль будет выведено:

All: [Brest, Minsk, Mosсow, Polotsk]


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)