集合框架定义了几种可应用于集合和映射的算法。
这些算法在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 。 |
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 支持的不可修改的排序集。 |
示例
以下是一个示例,演示了如何集合各种算法 -
import java.util.*;
/* 文件 : RunEncap.java */
public class RunEncap {
public static void main(String args[]) {
// 创建并初始化链表
LinkedList ll = new LinkedList();
ll.add(new Integer(-18));
ll.add(new Integer(22));
ll.add(new Integer(-21));
ll.add(new Integer(12));
// 创建一个逆序比较器
Comparator r = Collections.reverseOrder();
// 使用比较器对列表进行排序
Collections.sort(ll, r);
// Get iterator
Iterator li = ll.iterator();
System.out.print("列表反向排序: ");
while (li.hasNext()) {
System.out.print(li.next() + ", ");
}
System.out.println();
Collections.shuffle(ll);
// display randomized list
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));
}
}
执行上面示例代码,得到以下结果 -
列表反向排序: 22, 12, -18, -21,
列表乱序之后: -18, 12, 22, -21,
最小值: -21
最大值: 22