Arrays.sort()和Collections.sort()的源码分析

Arrays.sort()

public static <T> void sort(T[] a, Comparator<? super T> c) {
//<? super T>表示都是类型T的父类,包括T自己(特别注意)
        if (c == null) {
            sort(a);
        } else {
            if (LegacyMergeSort.userRequested)
                legacyMergeSort(a, c);
            else
                TimSort.sort(a, 0, a.length, c, null, 0, 0);
        }
    }

Arrays.sort重写Comparator,不可以用基本类型数组,因为基本类型不是Object,更不会实现Comparator接口,自然也就无法调用compareTo方法来进行比较大小,当然也就不能用int[]数组,要想对int型排序的话,参数a、c必须用Integer[]数组才可以
但很奇怪的一点是
T是二维数组时 ,?是一维数组,这样是可以的,我理解为二维数组不是基本类型?是矩阵?(T,?)T类型的数据会转换成?类型的数据,满足这个条件<? super T>表示都是类型T的父类,包括T自己(特别注意),一维数组 super 二维数组(毕竟二维数组是在一维数组的基础上增强??)

Arrays.sort(is,new Comparator<int[]>()){
	public int compare(int[] i1,int[] i2){
		return i1[0]-i2[0];;
	}
}

Collections.sort()

@SuppressWarnings({"unchecked", "rawtypes"})
    public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);//以集合来排序
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值