Arraylist<T>等实现自定义的排序算法
来源:互联网 发布:mackeeper说我mac中毒 编辑:程序博客网 时间:2024/06/05 16:43
考试的时候,本想到Arraylist可以自定义排序算法,可是忘记了返回值(当时看不了源码),后面只能自己写了个冒泡排序(效率太低了),现在说说如何自定义排序算法
import java.util.ArrayList;import java.util.Comparator;public class test { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Teacher>data= new ArrayList<Teacher>(); data.add(new Teacher("aaa", 3)); data.add(new Teacher("bbb", 1)); for(int i=0;i<data.size();i++){ System.out.println("老师名字为: "+data.get(i).name+" 老师的ID为: "+data.get(i).id); } data.sort(new Comparator<Teacher>() { @Override public int compare(Teacher o1, Teacher o2) { // TODO Auto-generated method stub if(o1.id>o2.id)return 1; //从大到小排列! 1代表需要排列 else return -1; } }); for(int i=0;i<data.size();i++){ System.out.println("老师名字为: "+data.get(i).name+" 老师的ID为: "+data.get(i).id); } }}class Teacher{ public String name; public int id; public Teacher(String name,int id){ this.name=name; this.id=id; }}
最后的运行结果为
我在考试时一直以为0 和1 ,看来源码后发现是<0 这个判断条件,Comparator里面就是自己自定义的排序,从大到小还是从小到大,
下面是Arratlist.sort()采用的算法源码:
@SuppressWarnings("fallthrough") private static <T> void binarySort(T[] a, int lo, int hi, int start, Comparator<? super T> c) { assert lo <= start && start <= hi; if (start == lo) start++; for ( ; start < hi; start++) { T pivot = a[start]; // Set left (and right) to the index where a[start] (pivot) belongs int left = lo; int right = start; assert left <= right; /* * Invariants: * pivot >= all in [lo, left). * pivot < all in [right, start). */ while (left < right) { int mid = (left + right) >>> 1; if (c.compare(pivot, a[mid]) < 0) right = mid; else left = mid + 1; } assert left == right; int n = start - left; // The number of elements to move // Switch is just an optimization for arraycopy in default case switch (n) { case 2: a[left + 2] = a[left + 1]; case 1: a[left + 1] = a[left]; break; default: System.arraycopy(a, left, a, left + 1, n); } a[left] = pivot; } }
其实就是快速排序算法。
阅读全文
0 0
- Arraylist<T>等实现自定义的排序算法
- ArrayList实现自定义排序
- 继承ArrayList类实现数组的自定义添加,排序等操作!
- java ArrayList自动排序算法的实现
- ArrayList自定义排序的两种实现方式
- Java ArrayList的自定义排序
- Java ArrayList的自定义排序
- JAVA ArrayList利用Comparator实现自定义排序
- ArrayList等常见集合的排序问题
- 实现 ArrayList 的 IComparer排序
- \t\t使用插入排序优化快速排序的算法实现
- 对ArrayList的自定义元素进行排序
- Array和ArrayList的自定义排序问题
- [LIST]ArrayList的自定义排序方法
- JAVA中ArrayList的自定义排序
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- ArrayList自定义排序
- ArrayList自定义排序
- 生活小记10
- PyTorch基本用法(二)——Variable
- loadrunner Web_类函数之web_reg_add_cookie()
- java内存泄漏的定位与分析
- java--继承(1)
- Arraylist<T>等实现自定义的排序算法
- Mysql数据结构
- 2017青岛网赛 C
- Android Studio常用快捷键
- 深入剖析Java中的装箱和拆箱
- 深度学习和神经网络——第二周笔记
- qs.stringify() 和JSON.stringify()的区别
- java常用基础类
- 第二周 项目三 体验复杂度