Алгоритмы Collection
Структура коллекций определяет несколько алгоритмов, которые могут применяться к коллекциям и Map.
Эти алгоритмы определяются как статические методы в классе Collections. Некоторые из методов могут генерировать ClassCastException, которое возникает при попытке сравнить несовместимые типы или UnsupportedOperationException, которое возникает, когда предпринимается попытка изменить немодифицируемую коллекцию.
Методы
Методы, определенные в алгоритме структуры коллекции, суммированы в следующей таблице:
№ Метод и описание
1 static int binarySearch(List list, Object value, Comparator c)
Ищет значение в списке, упорядоченном согласно c. Возвращает позицию значения в списке или -1, если значение не найдено.
2 static int binarySearch(List list, Object value)
Ищет значение в списке. Список должен быть отсортирован. Возвращает позицию значения в списке или -1, если значение не найдено.
3 static void copy(List list1, List list2)
Копирует элементы из list2 в list1.
4 static Enumeration enumeration(Collection c)
Возвращает перечисление по c.
5 static void fill(List list, Object obj)
Назначает obj каждому элементу списка.
6 static int indexOfSubList(List list, List subList)
Ищет список для первого появления subList. Возвращает индекс первого совпадения или .1, если совпадение не найдено.
7 static int lastIndexOfSubList(List list, List subList)
Ищет список для последнего появления subList. Возвращает индекс первого совпадения или .1, если совпадение не найдено.
8 static ArrayList list(Enumeration enum)
Возвращает ArrayList, содержащий элементы enum.
9 static Object max(Collection c, Comparator comp)
Возвращает максимальный элемент в c, определенный comp.
10 static Object max(Collection c)
Возвращает максимальный элемент в c, определенный естественным упорядочением. Сбор не нужно сортировать.
11 static Object min(Collection c, Comparator comp)
Возвращает минимальный элемент в c, определенный comp. Сбор не нужно сортировать.
12 static Object min(Collection c)
Возвращает минимальный элемент в c, определенный естественным упорядочением.
13 static List nCopies(int num, Object obj)
Возвращает num копий obj, содержащихся в неизменяемом списке. num должно быть больше или равно нулю.
14 static boolean replaceAll(List list, Object old, Object new)
Заменяет все вхождения старых новыми в списке. Возвращает true, если произошла хотя бы одна замена. В противном случае возвращает false.
15 static void reverse(List list)
Делает порядок в списке задом наперёд.
16 static Comparator reverseOrder( )
Возвращает обратный компаратор.
17 static void rotate(List list, int n)
Поворачивает список по n местам вправо. Для поворота влево используйте отрицательное значение для n.
18 static void shuffle(List list, Random r)
Перемешивает (т.е. рандомизирует) элементы в списке, используя r как источник случайных чисел.
19 static void shuffle(List list)
Перемешивает (т.е. рандомизирует) элементы в списке.
20 static Set singleton(Object obj)
Возвращает obj как неизменяемое множество. Это простой способ преобразования одного объекта в набор.
21 static List singletonList(Object obj)
Возвращает obj как непреложный список. Это простой способ преобразования одного объекта в список.
22 static Map singletonMap(Object k, Object v)
Возвращает пару ключ/значение k/v как неизменяемую карту. Это простой способ преобразовать одну пару ключ/значение в карту.
23 static void sort(List list, Comparator comp)
Сортирует элементы списка, как определено comp.
24 static void sort(List list)
Сортирует элементы списка, определяемые их естественным упорядочением.
25 static void swap(List list, int idx1, int idx2)
Обменивает элементы в списке по индексам, указанными idx1 и idx2.
26 static Collection synchronizedCollection(Collection c)
Возвращает потокобезопасную коллекцию, поддерживаемую c.
27 static List synchronizedList(List list)
Возвращает список потоков, поддерживаемый списком.
28 static Map synchronizedMap(Map m)
Возвращает потокобезопасный Map, поддерживаемую m.
29 static Set synchronizedSet(Set s)
Возвращает потокобезопасный набор, поддерживаемый s.
30 static SortedMap synchronizedSortedMap(SortedMap sm)
Возвращает потокобезопасный отсортированный Map, поддерживаемый sm.
31 static SortedSet synchronizedSortedSet(SortedSet ss)
Возвращает потокобезопасный отсортированный набор, поддерживаемый ss.
32 static Collection unmodifiableCollection(Collection c)
Возвращает немодифицируемую коллекцию, поддерживаемую c.
33 static List unmodifiableList(List list)
Возвращает немодифицируемый список, поддерживаемый list.
34 static Map unmodifiableMap(Map m)
Возвращает немодифицируемый Map, поддерживаемую m.
35 static Set unmodifiableSet(Set s)
Возвращает немодифицируемый набор, поддерживаемый s.
36 static SortedMap unmodifiableSortedMap(SortedMap sm)
Возвращает немодифицируемый отсортированный Map, поддерживаемый sm.
37 static SortedSet unmodifiableSortedSet(SortedSet ss)
Возвращает немодифицируемый отсортированный набор, поддерживаемый ss.
Пример
Ниже приведен пример, демонстрирующий различные алгоритмы в Java:
import java.util.*;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Создаём и инициализируем связанный список
LinkedList ll = new LinkedList();
ll.add(new Integer(-8));
ll.add(new Integer(20));
ll.add(new Integer(-20));
ll.add(new Integer(8));
// Создаём компаратор обратного порядка
Comparator r = Collections.reverseOrder();
// Сортировка списка с помощью компаратора
Collections.sort(ll, r);
// Получаем итератор
Iterator li = ll.iterator();
System.out.print("Список, отсортированный задом наперёд: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
Collections.shuffle(ll);
// Отображаем случайный список
li = ll.iterator();
System.out.print("Список перемешанный: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
System.out.println("Минимум: " + Collections.min(ll));
System.out.println("Максимум: " + Collections.max(ll));
}
}
Получим следующий результат:
Список, отсортированный задом наперёд: 20 8 -8 -20
Список перемешанный: 20 -20 8 -8
Минимум: -20
Максимум: 20