【1.JDK底层源码剖析】4.1 Collections常用方法的源码剖析

Collections 类常用方法源码剖析(基于 Java 11)

java.util.Collections 是一个专门用于操作集合(Collection、Map 等)的工具类,提供了大量静态方法,包括排序、搜索、同步包装、不可变包装等功能。与 Arrays 类类似,它采用工具类的设计模式:构造器私有,所有方法都是静态的。

📊 核心方法概览

方法类别 方法名 功能描述 关键特性
排序操作 sort() 对 List 进行排序 使用修改的归并排序,保证稳定排序
reverse() 反转 List 中元素顺序 使用双指针交换算法
搜索操作 binarySearch() 二分查找已排序列表 要求列表已排序,性能 O(log n)
同步包装 synchronizedXxx() 创建线程安全的集合包装器 方法级同步,使用 mutex 对象
不可变包装 unmodifiableXxx() 创建不可修改的集合视图 修改操作抛出异常
类型安全包装 checkedXxx() 创建类型安全的集合包装器 在运行时检查元素类型
特殊集合 emptyXxx() 返回空集合 单例模式,节省内存
singletonXxx() 返回只包含一个元素的集合 不可变单元素集合
其他工具 shuffle() 随机打乱列表顺序 使用默认或指定随机源
frequency() 统计元素出现次数 基于 equals() 方法比较

🔍 核心方法源码深度解析

1. 排序操作

sort(List<T> list) 方法
public static <T extends Comparable<? super T>> void sort(List<T> list) {
   
   
    list.sort(null);
}

// 更通用的排序方法
public static <T> void sort(List<T> list, Comparator<? super T> c) {
   
   
    list.sort(c);
}

在 Java 8+ 中,Collections.sort() 实际上委托给了 List.sort() 方法。对于 ArrayList,其 sort() 方法实现如下:

// ArrayList.java 中的 sort 方法
public void sort(Comparator<? super E> c) {
   
   
    final int expectedModCount = modCount;
    Arrays.sort((E[]) elementData, 0, size, c);
    if (modCount != expectedModCount) {
   
   
        throw new ConcurrentModificationException();
    }
    modCount++;
}

最终调用的是 Arrays.sort(),对于对象数组使用 TimSort 算法:

// Arrays.java
public static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c) {
   
   
    if (c == null) {
   
   
        sort(a, fromIndex, toIndex); // 使用自然排序
    } else {
   
   
        if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, fromIndex, toIndex, c); // 传统归并排序
        <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值