Java List排序
2016-07-20 11:02
411 查看
1. List排序是我们经常用到的。 2. 2种方法 collections.sort(List<T> list) //对list进行升序排列. 列表中所有的元素必须执行了Comparable接口 ,即列表中所有的元素都是可以相互 比较的(e1.compareTo(e2)。util实现的排序方法是稳定排序 collections.sort(List<T> list, Comparator<? super T> c) //可以自定义排序(自定义排序顺序,可以降序升序) 3. 举例 //方法1,list中对象试想comparable接口 class Stu implements Comparable<Stu> { String name; int age; public Stu(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; } public void print(){ System.out.println(age + "\t" + name); } @Override public int compareTo(Stu o) { // TODO Auto-generated method stub int num = age - o.age; if(num == 0){ return name.compareTo(o.name); } return num; } public static void main(String[] args) { List<Stu> list = new ArrayList<>(); Stu e1 = new Stu("a", 10); list.add(e1); Stu e2 = new Stu("a", 11); list.add(e2); Stu e3 = new Stu("b", 10); list.add(e3); Collections.sort(list); for(Stu e : list) { e.print(); } } } //方法2重载Collections.sort()函数 class Stu { String name; int age; public Stu(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; } public void print(){ System.out.println(age + "\t" + name); } public static void main(String[] args) { // TODO Auto-generated method stub List<Stu> list = new ArrayList<>(); Stu e1 = new Stu("a", 10); list.add(e1); Stu e2 = new Stu("a", 11); list.add(e2); Stu e3 = new Stu("b", 10); list.add(e3); Collections.sort(list, new Comparator<Stu>() { public int compare(Stu o1, Stu o2) { int num = o1.age - o2.age; if(num == 0){ return o1.name.compareTo(o2.name); } return num; }; }); for(Stu e : list) { e.print(); } } } 其实Collections.sort()函数的内部实现是调用list.sort()函数->将list变为数组toArray()->对数组排序Arrays.sort() 即上面也可以改为 public static void main(String[] args) { // TODO Auto-generated method stub List<Stu> list = new ArrayList<>(); Stu e1 = new Stu("a", 10); list.add(e1); Stu e2 = new Stu("a", 11); list.add(e2); Stu e3 = new Stu("b", 10); list.add(e3); list.sort(new Comparator<Stu>() { public int compare(Stu o1, Stu o2) { int num = o1.age - o2.age; if(num == 0){ return o1.name.compareTo(o2.name); } return num; }; }); for(Stu e : list) { e.print(); } } 或者 public static void main(String[] args) { // TODO Auto-generated method stub List<Stu> list = new ArrayList<>(); Stu e1 = new Stu("a", 10); list.add(e1); Stu e2 = new Stu("a", 11); list.add(e2); Stu e3 = new Stu("b", 10); list.add(e3); Stu[] array = (Stu[]) list.toArray(new Stu[list.size()]); Arrays.sort(array, new Comparator<Stu>() { public int compare(Stu o1, Stu o2) { int num = o1.age - o2.age; if(num == 0){ return o1.name.compareTo(o2.name); } return num; }; }); for(Stu e : list) { e.print(); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树