对List集合中的元素进行排序

来源:互联网 发布:流光5.0 软件解压密码 编辑:程序博客网 时间:2024/06/05 05:14

原文地址:http://blog.csdn.net/veryisjava/article/details/51675036


Collections对List集合中的数据进行排序


有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到

Java中提供的对集合进行操作的工具类Collections,其中的sort方法


先看一个简单的例子:

[java] view plain copy
  1. public static void main(String[] args) {  
  2.     List<Integer> nums = new ArrayList<Integer>();  
  3.         nums.add(3);  
  4.         nums.add(5);  
  5.         nums.add(1);  
  6.         nums.add(0);  
  7.         System.out.println(nums);  
  8.         Collections.sort(nums);  
  9.         System.out.println(nums);  
  10. }  
输出结果:
[3, 5, 1, 0]
[0, 1, 3, 5]

稍微复杂的List里面放一个复杂的对象

[java] view plain copy
  1. package core.java.collection.collections;  
  2.   
  3. public class User implements Comparable<User>{  
  4.       
  5.     private int score;  
  6.       
  7.     private int age;  
  8.       
  9.     public User(int score, int age){  
  10.         super();  
  11.         this.score = score;  
  12.         this.age = age;  
  13.     }  
  14.   
  15.     public int getScore() {  
  16.         return score;  
  17.     }  
  18.   
  19.     public void setScore(int score) {  
  20.         this.score = score;  
  21.     }  
  22.   
  23.     public int getAge() {  
  24.         return age;  
  25.     }  
  26.   
  27.     public void setAge(int age) {  
  28.         this.age = age;  
  29.     }  
  30.   
  31.     @Override  
  32.     public int compareTo(User o) {  
  33.         int i = this.getAge() - o.getAge();//先按照年龄排序  
  34.         if(i == 0){  
  35.             return this.score - o.getScore();//如果年龄相等了再用分数进行排序  
  36.         }  
  37.         return i;  
  38.     }  
  39.       
  40. }  
  41.   
  42. public static void main(String[] args) {  
  43.         List<User> users = new ArrayList<User>();  
  44.         users.add(new User(7826));  
  45.         users.add(new User(6723));  
  46.         users.add(new User(3456));  
  47.         users.add(new User(5523));  
  48.         Collections.sort(users);  
  49.         for(User user : users){  
  50.             System.out.println(user.getScore() + "," + user.getAge());  
  51.         }  
  52. }  
输出结果:
55,23
67,23
78,26
34,56
我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现
compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
了Comparable接口,Java已经给我们做好了。

Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:
[java] view plain copy
  1. package core.java.collection.collections;  
  2.   
  3. public class Students {  
  4.       
  5.     private int age;  
  6.     private int score;  
  7.       
  8.     public Students(int age, int score){  
  9.         super();  
  10.         this.age = age;  
  11.         this.score = score;  
  12.     }  
  13.       
  14.     public int getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(int age) {  
  18.         this.age = age;  
  19.     }  
  20.     public int getScore() {  
  21.         return score;  
  22.     }  
  23.     public void setScore(int score) {  
  24.         this.score = score;  
  25.     }  
  26. }  
  27. public static void main(String[] args) {  
  28.         List<Students> students = new ArrayList<Students>();  
  29.         students.add(new Students(23100));  
  30.         students.add(new Students(2798));  
  31.         students.add(new Students(2999));  
  32.         students.add(new Students(2998));  
  33.         students.add(new Students(2289));  
  34.         Collections.sort(students, new Comparator<Students>() {  
  35.   
  36.             @Override  
  37.             public int compare(Students o1, Students o2) {  
  38.                 int i = o1.getScore() - o2.getScore();  
  39.                 if(i == 0){  
  40.                     return o1.getAge() - o2.getAge();  
  41.                 }  
  42.                 return i;  
  43.             }  
  44.         });  
  45.         for(Students stu : students){  
  46.             System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());  
  47.         }  
  48. }  
输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法
中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 恶魔英语怎么写 恶魔少爷要硬上 恶魔高校图片 恶魔少爷萝莉控 恶魔翅膀图片 赤月恶魔老巢怎么走 恶魔果实系统 看见恶魔高清完整版 看见恶魔完整版 恶魔总裁的契约新娘 恶魔总裁请温柔 恶魔果实能力者在异界 恶魔高校特典 恶魔哥哥放了我 末世之恶魔果实系统 恶魔总裁你好毒 塞巴斯蒂安恶魔原型 怎么召唤恶魔 lady gaga 恶魔演唱会 超级恶魔奶爸 都市恶魔系统 穿普拉达的恶魔 恶魔弟弟放开我 恶魔等级划分 魔鬼 哀恸 恸怎么读 恸什么意思 哀恸顽艳 恸哭 恸哭之星 恸哭 女教师 恸哭的女教师 木桥久未恸哭在线播放 恸哭六军俱缟素 恸哭女教师高清在线播放 恸哭的教师爬玻璃 恸哭的教师爬玻璃图片 途恺