Этот класс удобен при поиске элемента во множестве, например для проверки, обладает ли какой-либо элемент свойством, определяющим множество.
В классе TreeSet четыре конструктора, создающих:
□ TreeSet () — пустой объект с естественным порядком элементов;
□ TreeSet (Comparator c) - пустой объект, в котором порядок задается объектом срав
нения c;
□ TreeSet(Collection coll) — объект, содержащий все элементы коллекции coll, с естественным порядком ее элементов;
□ TreeSet(SortedMap sf) — объект, содержащий все элементы отображения sf, в том же порядке.
В листинге 6.7 показано, как можно хранить комплексные числа в упорядоченном виде. Порядок задается объектом класса ComplexCompare, определенного в листинге 6.6.
Листинг 6.7. Хранение комплексных чисел в упорядоченном виде !
TreeSet ts = new TreeSet<>(new ComplexCompare());
ts.add(new Complex(l.2, 3.4));
ts.add(new Complex(-l.25, 33.4));
ts.add(new Complex(l.23, -3.45));
ts.add(new Complex(l6.2, 23.4));
iterator it = ts.iterator();
while (it.hasNext())
((Complex)it.next()).pr();
// for (Complex z: ts) z.pr(); // Другой способ обхода множества.
Действия с коллекциями
Коллекции предназначены для хранения элементов в удобном для дальнейшей обработки виде. Очень часто обработка заключается в сортировке элементов и поиске нужного элемента. Эти и другие методы обработки собраны в класс Collections.
Методы класса Collections
Все методы класса Collections статические, ими можно пользоваться, не создавая экземпляры класса Collections. Методов очень много, их количество увеличивается с каждой новой версией JDK, поэтому мы перечислим только основные методы.
Как обычно в статических методах, коллекция, с которой работает метод, задается его параметром.
Сортировка может быть сделана только в упорядочиваемой коллекции, реализующей интерфейс List. Для сортировки в классе Collections есть два метода:
□ static void sort(List coll) — сортирует в естественном порядке возрастания коллекцию coll, реализующую интерфейс List;
□ static void sort(List coll, Comparator c) — сортирует коллекцию coll в порядке, заданном объектом c.
После сортировки можно осуществить бинарный поиск в коллекции:
□ static int binarySearch(List coll, Object element) — отыскивает элемент element в отсортированной в естественном порядке возрастания коллекции coll и возвращает индекс элемента или отрицательное число, если элемент не найден; отрицательное число показывает индекс, с которым элемент element был бы вставлен в коллекцию, с обратным знаком;
□ static int binarySearch(List coll, Object element, Comparator c) — то же, но коллекция отсортирована в порядке, определенном объектом c.
Четыре метода находят наибольший и наименьший элементы в упорядочиваемой коллекции:
□ static Object max(Collection coll) - возвращает наибольший в естественном поряд
ке элемент коллекции coll;
□ static Object max(Collection coll, Comparator c) — то же в порядке, заданном объектом c;
□ static Object min(Collection coll) — возвращает наименьший в естественном порядке элемент коллекции coll;
□ static Object min(Collection coll, Comparator c) — то же в порядке, заданном объектом c.
Два метода "перемешивают" элементы коллекции в случайном порядке:
□ static void shuffle(List coll) — случайные числа задаются по умолчанию;
□ static void shuffle(List coll, Random r) — случайные числа определяются объектом r.
Метод reverse (List coll) меняет порядок расположения элементов на обратный.
Метод copy(List from, List to) копирует коллекцию from в коллекцию to.
Метод fill (List coll, Object element) заменяет все элементы существующей коллекции coll элементом element.
С остальными методами класса Collections мы будет знакомиться по мере надобности.
Упражнение
3. Упорядочите коллекции, созданные в этой главе, и проделайте в них бинарный поиск.
Заключение
Итак, в данной главе мы выяснили, что язык Java предоставляет множество средств для работы с большими объемами информации. В массе случаев достаточно добавить в программу три — пять операторов, чтобы можно было проделать нетривиальную обработку информации.
В следующей главе мы рассмотрим аналогичные средства для работы с массивами, датами, для получения случайных чисел и прочих необходимых средств программирования.
Вопросы для самопроверки
1. Что называется коллекцией?
Читать дальше
Конец ознакомительного отрывка
Купить книгу