java arrays.aslist()_Java Arrays.asList()与Arrays.sort()分析

Java Arrays.asList()与Arrays.sort()分析

声明

Array.asList()

// 示例

int[] arr = new int[5];

List list = Arrays.asList(arr);

// Arrays.asList(a)源码

public static List asList(T... a) {

return new ArrayList<>(a);

}

Arrays.asList(arr)将数组arr或者指定个数的对象转换为list;list是Arrays的内部类ArrayList实例(ArrayList<>(a)),与java.util.ArrayList不是一回事),长度固定,只能遍历访问,不能使用修改集合相关的方法,比如add/remove/clear方法会抛出UnsupportedOperationException异常;

适配器模式:修改数组arr内容后,list内容也会随之改变,体现适配器模式(只转换借款,后台数据仍然是数组)

Arrays.sort()

针对基本数据类型:DualPivotQuickSort

针对基本数据类型,Array.sort()采用DualPivotQuickSort算法排序;

DualPivotQuickSort基本流程:

元素个数:不超过插入排序阈值(默认47),选用插入排序;

元素个数:插入排序阈值-快排阈值(默认286),选用DualPivotQuickSort

元素个数:超过快排阈值,选用TimSort归并排序;

DualPivotQuickSort性能

DualPivotQuickSort在经典快排基础上改进,时间复杂度稳定为O(n logn)

针对Object类型和泛型:TimSort

TimSort基本流程

用户通过系统参数LegacyMergeSort.userRequested选定排序方式:

LegacyMergeSort.userRequested为TRUE,进行经典二路归并;

LegacyMergeSort.userRequested为FALSE,进行TimSort归并排序;

TimSort性能

TimSort算法平均时间复杂度为O(n logn),最优情况下为O(n)好于经典归并排序O(n logn),空间复杂度与经典归并排序一样均为O(n);

因此在JDK1.8中,Java对对象和泛型使用TimSort的原因是:

TimSort性能稳定,而快速排序不稳定;

TimSort最优情况下时间复杂度为O(n)好于经典归并排序O(n logn)

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值