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

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

 1 package com.kaishengit;
2
3 import java.util.Arrays;
4 import java.util.Collections;
5 import java.util.List;
6 /**
7 * @author Wgs
8 * @version 1.0
9 * @create:2018/04/28
10 */
11 public class SortDemo {
12 public static void main(String[] args) {
13 List<Integer> srs = Arrays.asList(5,2,9,3,4);
14 System.out.println("----排序前----");
15 // 5 2 9 3 4
16 prints(srs);
17 // 排序
18 Collections.sort(srs);
19 System.out.println("----排序后----");
20 // 2 3 4 5 9
21 prints(srs);
22 }
23
24 private static void prints(List<Integer> srs) {
25 for (Integer s : srs){
26 System.out.println(s);
27 }
28 }
29 }

结果

56,34
23,55
23,67
26,78


稍微复杂的List里面放一个复杂的对象
 1 package com.kaishengit;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7 /**
8 * @author Wgs
9 * @version 1.0
10 * @create:2018/04/28
11 */
12 public class User implements Comparable<User> {
13 private int age;
14 private int score;
15
16 public User(int age, int score) {
17 this.age = age;
18 this.score = score;
19 }
20
21 public int getAge() {
22 return age;
23 }
24
25 public void setAge(int age) {
26 this.age = age;
27 }
28
29 public int getScore() {
30 return score;
31 }
32
33 public void setScore(int score) {
34 this.score = score;
35 }
36
37 @Override
38 public int compareTo(User o) {
39 // 先按照年龄排序
40 int i = this.getAge() - o.age;
41 // 年龄相等按照成绩排序
42 if (i == 0) {
43 i = this.getScore() - o.getScore();
44 }
45 return i;
46 }
47
48 public static void main(String[] args) {
49 List<User> users = new ArrayList<User>();
50 users.add(new User(78, 26));
51 users.add(new User(67, 23));
52 users.add(new User(34, 56));
53 users.add(new User(55, 23));
54 Collections.sort(users);
55 for (User user : users) {
56 System.out.println(user.getScore() + "," + user.getAge());
57 }
58
59 /**
60 * 56,34
61 * 23,55
62 * 23,67
63 * 26,78
64 */
65 }
66 }
我们会发现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 com.kaishengit;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.Comparator;
6 import java.util.List;
7
8 /**
9 * @author Wgs
10 * @version 1.0
11 * @create:2018/04/28
12 */
13 public class User {
14 private int age;
15 private int score;
16
17 public User(int age, int score) {
18 this.age = age;
19 this.score = score;
20 }
21
22 public int getAge() {
23 return age;
24 }
25
26 public void setAge(int age) {
27 this.age = age;
28 }
29
30 public int getScore() {
31 return score;
32 }
33
34 public void setScore(int score) {
35 this.score = score;
36 }
37
38
39 public static void main(String[] args) {
40 List<User> users = new ArrayList<User>();
41 users.add(new User(78, 26));
42 users.add(new User(67, 23));
43 users.add(new User(34, 56));
44 users.add(new User(55, 23));
45 Collections.sort(users, new Comparator<User>() {
46 @Override
47 public int compare(User o1, User o2) {
48 int i = o1.getScore() - o2.getScore();
49 if(i == 0){
50 return o1.getAge() - o2.getAge();
51 }
52 return i;
53 }
54 });
55 for (User user : users) {
56 System.out.println(user.getScore() + "," + user.getAge());
57 }
58
59 /**
60 * 56,34
61 * 23,55
62 * 23,67
63 * 26,78
64 */
65 }
66 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. 删除 list 集合中的元素

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

随机推荐

  1. 从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

    简介: 由于这篇文章真的很长,大量的篇幅在讲述内核的实现,如果你对这部分不感兴趣,那么在建议你在看完第一部分的三个问题后,思考一下,然后直接跳转到我们对问题的回答. 作者:张伟(谢石)   由于这篇文 ...

  2. 阿里云RemoteShuffleService新功能:AQE和流控

    ​简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能.稳定性问题,并使得存算分离架构得以实施.为了更方便大家使用和扩展 ...

  3. Redis消息队列发展历程

    ​简介:Redis是目前最受欢迎的kv类数据库,当然它的功能越来越多,早已不限定在kv场景,消息队列就是Redis中一个重要的功能.Redis从2010年发布1.0版本就具备一个消息队列的雏形,随着1 ...

  4. Fluid — 云原生环境下的高效“数据物流系统”

    简介: 为了解决大数据.AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高.联合分析难.多维管理杂等痛点问题,南京大学 PASALab.阿里巴巴.Alluxio 在 2020 年 ...

  5. Apsara Stack 2.0技术百科(9宫格)

    ​ ​ ​​​​​​​​ 原文链接 本文为阿里云原创内容,未经允许不得转载. ​

  6. ACMMM2021|在多模态训练中融入“知识+图谱”:方法及电商应用实践

    ​简介: 随着人工智能技术的不断发展,知识图谱作为人工智能领域的知识支柱,以其强大的知识表示和推理能力受到学术界和产业界的广泛关注.近年来,知识图谱在语义搜索.问答.知识管理等领域得到了广泛的应用. ...

  7. 深入解析 Dubbo 3.0 服务端暴露全流程

    ​简介: 随着云原生时代的到来,Dubbo 3.0 的一个很重要的目标就是全面拥抱云原生.正因如此,Dubbo 3.0 为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制. ...

  8. WebGL实现简易的局部“马赛克”

    前言 接触过Canvas的小伙伴应该都知道,在Canvas2D中我们要加载一个图片很简单,通过调用drawImage API就能将图像绘制到画布上,当然在WebGL中我们也可以绘制图像,在绘制时我们需 ...

  9. WordPress CVE-2022-4230复现分析

    前言 开始CVE审计之旅 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击.默认情况下,具有管理选项功能 (a ...

  10. 《Modern C++ Design》之上篇

    如下内容是在看侯捷老师翻译的<Modern C++ Design>书籍时,整理的code和摘要,用于不断地温故知新. 第一章 1. 运用 Template Template 参数实作 Po ...