从入门到精通:集合工具类Collections全攻略!
字数 1572 2025-08-10 08:28:13
Java集合工具类Collections详解
一、Collections工具类概述
Collections是Java中操作Set、List和Map等集合的工具类,位于java.util包中。它提供了一系列静态方法用于对集合元素进行排序、查询、修改等操作,还包括对集合对象设置不可变、实现同步控制等功能。
二、Collections常用功能
1. 排序操作
-
public static <T extends Comparable<? super T>> void sort(List<T> list)- 根据元素的自然顺序对指定列表按升序进行排序
- 列表中的所有元素都必须实现Comparable接口
-
public static <T> void sort(List<T> list, Comparator<? super T> c)- 根据指定比较器产生的顺序对指定列表进行排序
2. 打乱顺序
public static void shuffle(List<?> list)- 随机打乱集合中元素的顺序
3. 批量添加元素
public static <T> boolean addAll(Collection<? super T> c, T... elements)- 将所有指定元素添加到指定集合中
三、排序实现方式
1. Comparable接口实现排序
当使用Collections.sort(List)方法时,集合中的元素必须实现Comparable接口,并重写compareTo(T o)方法。
public class Person implements Comparable<Person> {
private String name;
private int age;
@Override
public int compareTo(Person o) {
// 升序:this - o
// 降序:o - this
return this.age - o.age; // 按年龄升序
}
}
2. Comparator接口实现排序
当需要更灵活的排序方式时,可以使用Comparator:
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// 前者-后者:升序
// 后者-前者:降序
return o2.getAge() - o1.getAge(); // 按年龄降序
}
});
3. Comparable与Comparator比较
| 特性 | Comparable | Comparator |
|---|---|---|
| 实现位置 | 在要排序的类中实现 | 独立的比较器类 |
| 排序方法 | compareTo(T o) | compare(T o1, T o2) |
| 使用场景 | 固定的自然排序 | 灵活的多种排序方式 |
| 修改影响 | 修改类代码 | 不影响原有类 |
四、其他实用方法
-
查找操作
binarySearch(List, key):二分查找max(Collection):返回最大元素min(Collection):返回最小元素
-
不可变集合
unmodifiableXxx():返回不可修改的集合视图
-
同步控制
synchronizedXxx():返回线程安全的集合包装
-
其他
reverse(List):反转列表fill(List, obj):用指定元素替换列表中所有元素copy(dest, src):复制列表swap(List, i, j):交换列表中两个元素的位置
五、使用示例
1. 基本类型排序
List<Integer> numbers = new ArrayList<>();
Collections.addAll(numbers, 3, 34, 345, 66, 22, 1);
Collections.sort(numbers); // 排序
Collections.shuffle(numbers); // 打乱顺序
2. 字符串排序
List<String> strings = new ArrayList<>();
strings.add("nihao");
strings.add("hello");
strings.add("world");
Collections.sort(strings); // 按字典序排序
3. 自定义对象排序
List<Person> people = new ArrayList<>();
people.add(new Person("秋香", 15));
people.add(new Person("石榴姐", 19));
// 使用Comparable排序
Collections.sort(people);
// 使用Comparator排序
Collections.sort(people, (p1, p2) -> p2.getAge() - p1.getAge());
六、注意事项
- 使用
sort(List)方法时,集合元素必须实现Comparable接口 - 对于Map的操作,Collections主要用于操作其键或值的集合视图
- 对于整个Map的操作,通常直接使用Map接口提供的方法更合适
- 使用不可变集合视图后,尝试修改会抛出UnsupportedOperationException
- 同步集合包装器提供了基本的线程安全,但复合操作仍需额外同步
七、总结
Collections工具类为Java集合操作提供了强大支持,特别是排序功能。掌握Comparable和Comparator两种排序方式,能够灵活应对各种排序需求。对于自定义类型,推荐优先使用Comparator方式,因为它不会侵入原有类代码,且支持多种排序规则。