收集算法(Collection Algorithms)
集合框架定义了几种可应用于集合和映射的算法。
这些算法在Collections类中定义为静态方法。 有些方法可能会抛出ClassCastException ,当尝试比较不兼容的类型时会发生这种情况,或者在尝试修改不可修改的集合时发生UnsupportedOperationException 。
集合框架算法中定义的方法总结在下表中 -
Sr.No. | 方法和描述 |
---|---|
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。 |
9 | static Object max(Collection c, Comparator comp) 返回由comp确定的c中的最大元素。 |
10 | static Object max(Collection c) 返回由自然顺序确定的c中的最大元素。 无需对集合进行排序。 |
11 | static Object min(Collection c, Comparator comp) 返回由comp确定的c中的最小元素。 无需对集合进行排序。 |
12 | static Object min(Collection c) 返回c中的最小元素,由自然顺序确定。 |
13 | static List nCopies(int num, Object obj) 返回包含在不可变列表中的obj的num个副本。 num必须大于或等于零。 |
14 | static boolean replaceAll(List list, Object old, Object new) 用列表中的new替换所有旧的old。 如果至少发生一次替换,则返回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) 返回由list支持的线程安全列表。 |
28 | static Map synchronizedMap(Map m) 返回由m支持的线程安全映射。 |
29 | static Set synchronizedSet(Set s) 返回由s支持的线程安全集。 |
30 | static SortedMap synchronizedSortedMap(SortedMap sm) 返回由sm支持的线程安全的有序集。 |
31 | static SortedSet synchronizedSortedSet(SortedSet ss) 返回由ss支持的线程安全集。 |
32 | static Collection unmodifiableCollection(Collection c) 返回由c支持的不可修改的集合。 |
33 | static List unmodifiableList(List list) 返回列表支持的不可修改列表。 |
34 | static Map unmodifiableMap(Map m) 返回由m支持的不可修改的映射。 |
35 | static Set unmodifiableSet(Set s) 返回由s支持的不可修改集。 |
36 | static SortedMap unmodifiableSortedMap(SortedMap sm) 返回由sm支持的不可修改的有序映射。 |
37 | static SortedSet unmodifiableSortedSet(SortedSet ss) 返回由ss支持的不可修改的有序集。 |
例子 (Example)
以下是一个示例,演示了各种算法。
import java.util.*;
public class AlgorithmsDemo {
public static void main(String args[]) {
// Create and initialize linked list
LinkedList ll = new LinkedList();
ll.add(new Integer(-8));
ll.add(new Integer(20));
ll.add(new Integer(-20));
ll.add(new Integer(8));
// Create a reverse order comparator
Comparator r = Collections.reverseOrder();
// Sort list by using the comparator
Collections.sort(ll, r);
// Get iterator
Iterator li = ll.iterator();
System.out.print("List sorted in reverse: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
Collections.shuffle(ll);
// display randomized list
li = ll.iterator();
System.out.print("List shuffled: ");
while(li.hasNext()) {
System.out.print(li.next() + " ");
}
System.out.println();
System.out.println("Minimum: " + Collections.min(ll));
System.out.println("Maximum: " + Collections.max(ll));
}
}
这将产生以下结果 -
输出 (Output)
List sorted in reverse: 20 8 -8 -20
List shuffled: 20 -20 8 -8
Minimum: -20
Maximum: 20