关于List操作排序工具,collection.sort的原理
来源:互联网 发布:js文件和jsp文件区别 编辑:程序博客网 时间:2024/05/21 19:44
public class Solution { public int findKthLargest(int[] nums, int k) { // 首先先将数组存入一个List当中,便于我们操作 List<Integer> list = new ArrayList<Integer>(); for(int num:nums){ list.add(num); } //通过重写Collections.sort执行排序操作 // Collections.sort(list,new Comparator<Integer>(){ // public int compare(Integer arg0,Integer arg1){ // return arg0.compareTo(arg1); // } // }); Collections.sort(list); //因为要求的是第几大的,所以我们只需要从后面往前数就行了 return list.get(nums.length-k); }}
那天在进行list的排序操作的时候用到了collection.sort,于是就想找来看看关于collection.sort的实现、
@SuppressWarnings("unchecked") public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] array = list.toArray(); Arrays.sort(array); int i = 0; ListIterator<T> it = list.listIterator(); while (it.hasNext()) { it.next(); it.set((T) array[i++]); } }
从中可以看出排序主体为Arrays.sort(array);Arrays的sort实现为
public static void sort(Object[] array) { // BEGIN android-changed ComparableTimSort.sort(array); // END android-changed }
继续追踪,ComparableTimSort的sort实现ComparableTimSort.sort
static void sort(Object[] a)到static void sort(Object[] a, int lo, int hi)到private static void binarySort(Object[] a, int lo, int hi, int start)。
在binarySort中用于大小比较部分为:
Comparable<Object> pivot = (Comparable) a[start];int left = lo;int right = start;assert left <= right;while (left < right) {int mid = (left + right) >>> 1;if (pivot.compareTo(a[mid]) < 0)right = mid;elseleft = mid + 1;}
会调用Object的compareTo进行比较。而默认类似String和Integer类型都已经覆盖compareTo方法。所以可以自行进行比较。
所以在自定义类进行比较时,可以继承自Comparable,并实现compareTo即可调用Collections.sort对自定义对象进行排序,也可以重载
collections的sort函数进行比较。
0 0
- 关于List操作排序工具,collection.sort的原理
- list 的自定义排序 Collection.sort()方法个人学习总结
- java collection.sort()根据时间排序list
- android collection.sort()根据时间排序list
- 用Collection.sort对List做排序
- 用collection.sort()方法对list集合排序
- Collection.sort自定义排序的使用方法
- collection.sort排序
- 关于Collection.sort和java的枚举
- 关于Collection.sort
- 关于collection的操作注意。
- Collection中List,Set的排序
- List<String> 调用Collection.sort()整个流程的知识点
- 转:List , Collection, 排序
- collection,list,map 排序
- 根据时间排序(collection.sort())
- Java中应用Collections工具类的Sort()方法对List进行排序
- C#中List的排序用法(Sort)
- Android属性动画完全解析(上),初识属性动画的基本用法 .
- 使用CGContext绘图示例
- HTML语义化标签(一)
- 九度OJ-题目1510:替换空格
- Jsp初探2015-06-01
- 关于List操作排序工具,collection.sort的原理
- 论IT学习的乐趣之处
- 关于Java语言中,各种数据类型所占的位数汇总
- 打印菱形---命令行方式
- STL容器之list
- html5语义化标签(二)
- 我想过不打扰,却发现做不到。
- 织梦ajax登陆
- Fibonacci Numbers(斐波那契数列 前四位 后四位)