Collections.sort()的分析
来源:互联网 发布:只有我不在的街道知乎 编辑:程序博客网 时间:2024/06/10 22:11
首先我们得说明在Collections里面有两个排序方法
我们目前就只看第二个sort。
再对数组使用Arrays.sort进行排序。
总而言之,代码运行标志1后,数组a已经是有序的了。
为什么要将list转化成数组呢?
因为java内部的排序就只有针对数组的。
那么后面的是干什么呢?(list.listIterator()部分及以后)
举个例子
原list 1 5 8 3 4 2 6
排序后的数组 1 2 3 4 5 6 8
那么改成这样如何呢?
真的是生成了一个list么?
换言之
public static <T> void sort(List<T> list, Comparator<? super T> c) public static <T extends Comparable<? super T>> void sort(List<T> list)很清晰,第二个方法不需要传入比较器,但是传入的待排序的参数list必须实现Comparable接口。
我们目前就只看第二个sort。
Collections.java public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); //标识1 ListIterator<T> i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } }从上面我们可以清晰的看到,首先将要排序的list转化成数组。
再对数组使用Arrays.sort进行排序。
Arrays.java public static void sort(Object[] a) { if (LegacyMergeSort.userRequested) legacyMergeSort(a); else ComparableTimSort.sort(a); }Arrays的排序,我们不必深究。
总而言之,代码运行标志1后,数组a已经是有序的了。
为什么要将list转化成数组呢?
因为java内部的排序就只有针对数组的。
那么后面的是干什么呢?(list.listIterator()部分及以后)
举个例子
原list 1 5 8 3 4 2 6
排序后的数组 1 2 3 4 5 6 8
ListIterator<T> i = list.listIterator();上面的代码取得了原list的迭代器,然后不断的将排序后的数组替换进原list(这个过程就是不断的next移动标尺,放入,再移动..)。
那么改成这样如何呢?
@SuppressWarnings("unchecked") public static <T extends Comparable<? super T>> List<T> sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); return (List<T>) Arrays.asList(a); }好理解了一下,不过额外生成了一个list。
真的是生成了一个list么?
Arrays.java public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }返回的是ArrayList!!!
换言之
List<Integer> a=new LinkedList<Integer>(); a.add(4); a.add(7); a.add(5); a.add(6); a.add(8); a.add(2); LinkedList<Integer> list=(LinkedList<Integer>) sort(a);这样的代码就会出错!!!
0 0
- Collections.sort()的分析
- 集合类Collections.sort()的源码分析
- Collections.sort分析
- Collections.sort()崩溃分析
- Collections的sort用法
- 深入分析集合List的排序Collections.sort
- Collections中sort()方法源代码的简单分析
- Collections中sort()方法源代码的简单分析
- Collections.sort排序的用法
- Collections的sort方法 排序
- Collections的sort方法 排序
- Collections的sort方法 排序
- Collections.sort()方法的应用
- Collections.sort()方法的使用
- jdk7 Collections.sort()方法报错分析
- Collections中sort()和Arrays中的sort方法分析
- Collections.sort
- Collections sort
- Linux C++开发环境搭建
- Cocos2d-JS开发中的一些小技巧
- C++学习:vector用法
- 手工释放linux内存——/proc/sys/vm/drop_cache
- C语言课设之 银行管理系统
- Collections.sort()的分析
- I/O model
- LeetCode:Rotate List
- 课设之员工管理系统
- 【Cocos2d-x游戏引擎开发笔记(12)】粒子系统实现与用户交互的特效
- spring MVC原理
- 带你走进P2P平台网站推广
- Linux 目录结构
- nginx反向代理配置