На этом шаге мы рассмотрим класс Collections
Все методы класса Collections статические, ими можно пользоваться, не создавая экземпляры класса Collections. Как обычно в статических методах, коллекция, с которой работает метод, задается его аргументом. Функций в данном классе большое количество, поэтому мы рассмотрим только некоторые из них, на наш взгляд наиболее часто используемые (с остальными функциями вы можете ознакомиться в документации):
Сортировка может быть сделана только в упорядочиваемой коллекции, реализующей интерфейс List. Для сортировки в классе Collections есть два метода:
После сортировки можно осуществить бинарный поиск в коллекции:
Следующие четыре метода находят наибольший и наименьший элементы в упорядочиваемой коллекции:
Следующие два метода "перемешивают" элементы коллекции в случайном порядке:
Также есть следующие функции для элементов коллекций:
Приведем ниже пример использования класса Collections.
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Программа для демонстации использования класса Collections. * В данной программе сначала формируется список произвольных значений. * Потом этот список сортируется с помощью функции Collections.sort(). * Далее QUERY_COUNT раз проверяется наличие произвольного значения в этом списке * с помощью функции Collections.binarySearch(). * На каждом запросе выводится результат key is found, если key есть в данном списке, * и key is not found в противном случае. * */ public class Main { private static final int COUNT_ELEMENTS = 10; private static final int MAX_VALUE_ELEMENTS = 40; private static final int QUERY_COUNT = 20; /** * Фуникция для ввывода элементов списка * */ private static <T> void printList(List<T> list) { for (T v : list) { System.out.print(" " + v); } System.out.println(); } public static void main(String[] args) { /*Создаем список*/ List<Integer> list = new ArrayList<>(); /*Формируем список с произвольными значениями*/ for (int i = 0; i < COUNT_ELEMENTS; i++) { int x = (int) (Math.random() * MAX_VALUE_ELEMENTS); list.add(x); } /*Выводим полученный список*/ System.out.print("Исходный список:"); printList(list); /*Сортируем исходный список*/ Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); /*Выводим отсортированный список*/ System.out.print("Отсортированный список:"); printList(list); /*Выполняем QUERY_COUNT запросов на поиск значения в списке*/ System.out.println("Запросы на поиск элементов в списке"); for (int i = 0; i < QUERY_COUNT; i++) { /*Формируем произвольное значение*/ int key = (int) (Math.random() * MAX_VALUE_ELEMENTS); /*Ищем полученное значение в списке*/ int pos = Collections.binarySearch(list, key, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); /*Если key есть в списке*/ if (pos >= 0) { /*то выводим, что такой ключ есть*/ System.out.println(key + " is found"); } else { /*иначе, выводим, что такого ключа нет*/ System.out.println(key + " is not found"); } } } }
Проект можно взять здесь
Рис. 1. Вывод программы
На следующем шаге мы рассмотрим класс Objects