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

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

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

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

先看一个简单的例子:

  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里面放一个复杂的对象

  1. package core.java.collection.collections;
  2. public class User implements Comparable<User>{
  3. private int score;
  4. private int age;
  5. public User(int score, int age){
  6. super();
  7. this.score = score;
  8. this.age = age;
  9. }
  10. public int getScore() {
  11. return score;
  12. }
  13. public void setScore(int score) {
  14. this.score = score;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. public void setAge(int age) {
  20. this.age = age;
  21. }
  22. @Override
  23. public int compareTo(User o) {
  24. int i = this.getAge() - o.getAge();//先按照年龄排序
  25. if(i == 0){
  26. return this.score - o.getScore();//如果年龄相等了再用分数进行排序
  27. }
  28. return i;
  29. }
  30. }
  31. public static void main(String[] args) {
  32. List<User> users = new ArrayList<User>();
  33. users.add(new User(78, 26));
  34. users.add(new User(67, 23));
  35. users.add(new User(34, 56));
  36. users.add(new User(55, 23));
  37. Collections.sort(users);
  38. for(User user : users){
  39. System.out.println(user.getScore() + "," + user.getAge());
  40. }
  41. }

输出结果:
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)
先看例子:

  1. package core.java.collection.collections;
  2. public class Students {
  3. private int age;
  4. private int score;
  5. public Students(int age, int score){
  6. super();
  7. this.age = age;
  8. this.score = score;
  9. }
  10. public int getAge() {
  11. return age;
  12. }
  13. public void setAge(int age) {
  14. this.age = age;
  15. }
  16. public int getScore() {
  17. return score;
  18. }
  19. public void setScore(int score) {
  20. this.score = score;
  21. }
  22. }
  23. public static void main(String[] args) {
  24. List<Students> students = new ArrayList<Students>();
  25. students.add(new Students(23, 100));
  26. students.add(new Students(27, 98));
  27. students.add(new Students(29, 99));
  28. students.add(new Students(29, 98));
  29. students.add(new Students(22, 89));
  30. Collections.sort(students, new Comparator<Students>() {
  31. @Override
  32. public int compare(Students o1, Students o2) {
  33. int i = o1.getScore() - o2.getScore();
  34. if(i == 0){
  35. return o1.getAge() - o2.getAge();
  36. }
  37. return i;
  38. }
  39. });
  40. for(Students stu : students){
  41. System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
  42. }
  43. }

输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

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

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。

对List集合中的元素进行排序的更多相关文章

  1. java如何对List集合中的元素进行排序(请收藏)

    在java开发中有时候我们需要对List集合中的元素按照一定的规则进行排序,比如说有个Person的集合,我们要根据Person的age属性进行排序输出,这就需要用到Java中提供的对集合进行操作的工 ...

  2. 2018.9.17 面试问题-----如何对List集合中的元素进行排序?

    Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先 ...

  3. c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)

    1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...

  4. 对list集合中的对象进行排序(转载)

    原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...

  5. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  6. java中对List中的元素进行排序

    Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 N ...

  7. 巧妙利用ToArray()函数移除集合中的元素

    当我们对集合foreach遍历时,不能直接移除遍历的集合的元素,解决的方法有很多种,见我之前的随笔: http://www.cnblogs.com/527289276qq/p/4331000.html ...

  8. list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作

    list,set等集合遍历时,不能remove集合中的元素.需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAl ...

  9. 删除 list 集合中的元素

    删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...

随机推荐

  1. Kinect for Windows V2开发教程

    教程 https://blog.csdn.net/openbug/article/details/80921437 Windows版Kinect SDK https://docs.microsoft. ...

  2. 请用正则实现String.trim()

    String.prototype.trim1=function(){ return this.replace(/(^\s*)|(\s*$)/g,""); }; 写一个functio ...

  3. adb--环境安装

    前戏 我们在做Android自动化的时候,adb命令是必不可少的,比如我们要获取一个包名,使用adb往手机上安装软件,获取activity等等,都要用到adb命令.而模拟器在我们没有手机测试的时候,可 ...

  4. django -- ORM建表

    前戏 ORM(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ORM的优势: ORM解决的主要问题是对象和关系的映射 ...

  5. 我是sb

    哪能倒在这? 细节很多的题怎么写????sb 考完再也不学了,太jb痛苦了. 总因为一些奇奇怪怪的原因导致我

  6. PATA1082Read Number in Chinese

    有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ...

  7. haproxy 配置文件详解 之 WEB监控平台

    HAProxy 虽然实现了服务的故障转移,但是在主机或者服务出现故障的时候,并不能发出通知告知运维人员,这对于及时性要求很高的业务系统来说,是非常不便的,不过,HAProxy 似乎也考虑到了这一点,在 ...

  8. [BUAA软工]团队贡献分博客

    Gamma阶段贡献分 Beta阶段贡献分 Alpha阶段贡献分 (博客最后部分) 复制过来: Alpha阶段 名字 角色 具体的可衡量的可验证的贡献 zpj PM,后端开发 博客X3 65 commi ...

  9. win10系统:VMware无法在Windows运行该怎么办?

     出现的问题: 解决方法: 点击“检查更新”或去官网下载最新版本 Vmware15.5.0(经过测试发现,Windows 10上面可以运行Vmware15.5.0 ) VMware Workstati ...

  10. QuantLib 金融计算——收益率曲线之构建曲线(5)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(5) 概述 Nelson-Siegel 模型家族的成员 Nelson-Siegel 模型 Svensson 模型 修正 Svensson 模型 ...