Java 的 java.util.Collections
类提供了一组静态方法,用于操作或返回集合(如列表、集合和映射)。Collections
类是一个实用工具类,旨在为集合提供便捷的算法和操作。以下是对 Collections
类及其常用方法的介绍。
常用方法总结
- 排序 :
sort(List<T> list)
、sort(List<T> list, Comparator<? super T> c)
- 查找 :
binarySearch(List<? extends Comparable<? super T>> list, T key)
、binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
- 反转 :
reverse(List<?> list)
- 旋转 :
rotate(List<?> list, int distance)
- 填充 :
fill(List<? super T> list, T obj)
- 复制 :
copy(List<? super T> dest, List<? extends T> src)
- 最小和最大 :
min(Collection<? extends T> coll)
、max(Collection<? extends T> coll)
- 同步集合 :
synchronizedList(List<T> list)
、synchronizedSet(Set<T> s)
、synchronizedMap(Map<K, V> m)
- 不可变集合 :
unmodifiableList(List<? extends T> list)
、unmodifiableSet(Set<? extends T> s)
、unmodifiableMap(Map<? extends K, ? extends V> m)
排序
-
sort(List<T> list)
:对列表进行升序排序,列表中的元素必须实现Comparable
接口。List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
Collections.sort(numbers); // 排序后,numbers为 [1, 2, 3, 4, 5] -
sort(List<T> list, Comparator<? super T> c)
:根据指定的比较器对列表进行排序。List<String> names = Arrays.asList("Charlie", "Alice", "Bob");
// 根据字符串长度排序
Collections.sort(names, (s1, s2) -> s1.length() - s2.length());
注:Collections.sort(names, (s1, s2) -> s1.length() - s2.length()) 中 (s1, s2) -> s1.length() - s2.length() 这是一个 Lambda 表达式,用于实现 Comparator 接口的 compare 方法。
查找
-
binarySearch(List<? extends Comparable<? super T>> list, T key)
:使用二分搜索法在列表中查找元素,返回索引。列表必须是已排序的。List<Integer> sortedNumbers = Arrays.asList(1, 2, 3, 4, 5);
int index = Collections.binarySearch(sortedNumbers, 3); // 返回索引 2 -
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
:使用二分搜索法在指定比较器的列表中查找元素。List<String> sortedNames = Arrays.asList("Alice", "Bob", "Charlie");
int index = Collections.binarySearch(sortedNames, "Bob", String::compareTo); // 返回索引 1
最大和最小值
-
max(Collection<? extends T> coll)
:返回集合中的最大元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int max = Collections.max(numbers); // 返回 5 -
min(Collection<? extends T> coll)
:返回集合中的最小元素。int min = Collections.min(numbers); // 返回 1
逆序
-
reverse(List<?> list)
:将列表中的元素反转。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(numbers); // 反转后,numbers为 [5, 4, 3, 2, 1]
随机化
-
shuffle(List<?> list)
:对列表进行随机打乱。Collections.shuffle(numbers); // numbers的元素顺序将被随机打乱
填充
-
fill(List<? super T> list, T obj)
:用指定元素替换列表中的所有元素。List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Collections.fill(list, "z"); // list 现在是 ["z", "z", "z"]
拷贝
-
copy(List<? super T> dest, List<? extends T> src)
:将源列表中的所有元素复制到目标列表中。List<String> dest = Arrays.asList(new String[3]);
List<String> src = Arrays.asList("a", "b", "c");
Collections.copy(dest, src); // dest 现在是 ["a", "b", "c"]
不可变集合
-
unmodifiableList(List<? extends T> list)
:返回一个不可修改的视图。List<String> list = Arrays.asList("a", "b", "c");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// unmodifiableList.add("d"); // 会抛出 UnsupportedOperationException
同步集合
-
synchronizedList(List<T> list)
:返回一个线程安全的列表。List<String> list = new ArrayList<>();
List<String> syncList = Collections.synchronizedList(list);
示例总结
以下是一个综合示例,展示了 Collections
类的一些常用方法:
import java.util.*;
public class CollectionsExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 1, 4, 2));
// 排序
Collections.sort(numbers);
System.out.println("排序后: " + numbers);
// 反转
Collections.reverse(numbers);
System.out.println("反转后: " + numbers);
// 随机打乱
Collections.shuffle(numbers);
System.out.println("随机打乱后: " + numbers);
// 查找最大和最小值
int max = Collections.max(numbers);
int min = Collections.min(numbers);
System.out.println("最大值: " + max + ", 最小值: " + min);
// 二分搜索
Collections.sort(numbers);
int index = Collections.binarySearch(numbers, 3);
System.out.println("元素 3 的索引: " + index);
// 同步集合
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
syncList.add("a");
syncList.add("b");
System.out.println("同步集合: " + syncList);
}
}
通过使用 Collections
类提供的这些方法,可以方便地对集合进行各种操作,提高代码的可读性和维护性。