Collections.sort()的分析
2015-03-04 13:56
169 查看
首先我们得说明在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);这样的代码就会出错!!!
相关文章推荐
- Collections.sort()的分析
- Collections中sort()方法源代码的简单分析
- 深入分析集合List的排序Collections.sort
- Collections.sort分析
- Collections.sort(List<T> list, Comparator<? super T> c) 源代码分析
- 集合类Collections.sort()的源码分析
- java 集合中的Collections.sort()排序方法的源码分析(一)
- jdk7 Collections.sort()方法报错分析
- Collections.sort()崩溃分析
- Java Collections Framework之Arrays(method:sort(),binarySearch(),copyOf())部分源码分析(基于JDK1.6)
- Collections中sort()和Arrays中的sort方法分析
- Collections.sort源码分析
- java.util.Collections.sort(List list)与Comparable,Comparator
- Arrays和Collections的sort方法
- Collections.sort() 对 List 排序
- 详测 Generics Collections TList (8): Sort
- 深入分析qsort库函数:std::sort和qsort的比较
- Collections.sort() 对 List 排序
- Arrays类中sort源码分析
- java源码分析:Arrays.sort