从入门到精通:集合工具类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)
使用场景 固定的自然排序 灵活的多种排序方式
修改影响 修改类代码 不影响原有类

四、其他实用方法

  1. 查找操作

    • binarySearch(List, key):二分查找
    • max(Collection):返回最大元素
    • min(Collection):返回最小元素
  2. 不可变集合

    • unmodifiableXxx():返回不可修改的集合视图
  3. 同步控制

    • synchronizedXxx():返回线程安全的集合包装
  4. 其他

    • 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());

六、注意事项

  1. 使用sort(List)方法时,集合元素必须实现Comparable接口
  2. 对于Map的操作,Collections主要用于操作其键或值的集合视图
  3. 对于整个Map的操作,通常直接使用Map接口提供的方法更合适
  4. 使用不可变集合视图后,尝试修改会抛出UnsupportedOperationException
  5. 同步集合包装器提供了基本的线程安全,但复合操作仍需额外同步

七、总结

Collections工具类为Java集合操作提供了强大支持,特别是排序功能。掌握Comparable和Comparator两种排序方式,能够灵活应对各种排序需求。对于自定义类型,推荐优先使用Comparator方式,因为它不会侵入原有类代码,且支持多种排序规则。

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) 方法。 2. Comparator接口实现排序 当需要更灵活的排序方式时,可以使用Comparator: 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. 基本类型排序 2. 字符串排序 3. 自定义对象排序 六、注意事项 使用 sort(List) 方法时,集合元素必须实现Comparable接口 对于Map的操作,Collections主要用于操作其键或值的集合视图 对于整个Map的操作,通常直接使用Map接口提供的方法更合适 使用不可变集合视图后,尝试修改会抛出UnsupportedOperationException 同步集合包装器提供了基本的线程安全,但复合操作仍需额外同步 七、总结 Collections工具类为Java集合操作提供了强大支持,特别是排序功能。掌握Comparable和Comparator两种排序方式,能够灵活应对各种排序需求。对于自定义类型,推荐优先使用Comparator方式,因为它不会侵入原有类代码,且支持多种排序规则。