Java 集合之给ArrayList排序

ArrayList的排序可以借助Collections工具类的sort(List list)以及重载的sort(List list, Comparator<? super T> c)方法;其中要想使用sort(List lis)方法进行排序集合元素必须实现comparable接口中的compareTo方法;使用重载的sort(List list, Comparator<? super T> c)方法则要传入一个自定义构造器,可以使用匿名内部类的方式传入构造器;

  • 1、如果是集合元素类型是8大基本类型的包装类(如Interge、Character等)或者是String类源码中这些类已经实现了Comparable接口,下面拿Integer类举例:
  List<Integer> list0 = new ArrayList<>();Random random = new Random();for(int i = 0; i<10;i++){list0.add(random.nextInt(100));}list0.forEach(System.out::println);  //排序前  [27,71,6,65,53,84,75,0,66,70]//直接使用默认自然排序(即从小到大的顺序)Collections.sort(list0);System.out.println("自然排序后>>>>>>>>>");list0.forEach(System.out::println);//自然排序后 [0,6,27,53,65,66,70,71,75,84]//我们也可以使用同名重载方法传一个构造器进行临时改变排序规则(按从大到小排序)Collections.sort(list0, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 < o1 ? -1 : ((02 == 01) ? 0 : 1);}});list0.forEach(System.out::println); // [84,75,71,70,66,65,53,27,6,0]
  • 对于对象的排序
           要想使用sort(List list)方法给集合排序集合元素必须实现comparable接口中的compareTo方法,所以要想实现对象自定义排序就要在compareTo方法里面做文章:
int compareTo(T t);该方法用于使当前对象与给定对象进行比较。当返回值>0时:当前对象比参数对象大当返回值<0时:当前对象比参数对象小当返回值=0时:当前对象等于参数对象

例子:
Person类:

@Data
public class Person implements  Comparable<Person>{public Person(String name, Integer age) {this.name = name;this.age = age;}private String name;private Integer age;@Overridepublic int compareTo(Person o) {// 按照年龄从小到大排序return this.getAge().compareTo(o.getAge());}
}

测试代码:

Person p1 = new Person("小王",22);Person p2 = new Person("小m",20);Person p3 = new Person("小t",30);Person p4 = new Person("小q",19);Person p5 = new Person("小u",20);Person p6 = new Person("小L",36);List<Person> list = new ArrayList<>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);list.add(p5);list.add(p6);System.out.println("未排序之前>>>:");list.forEach(System.out::println);Collections.sort(list);System.out.println("自定义排序之后>>>:");list.forEach(System.out::println);

输出结果:

未排序之前>>>:
Person(name=小王, age=22)
Person(name=小m, age=20)
Person(name=小t, age=30)
Person(name=小q, age=19)
Person(name=小u, age=20)
Person(name=小L, age=36)
自定义排序之后>>>:
Person(name=小q, age=19)
Person(name=小m, age=20)
Person(name=小u, age=20)
Person(name=小王, age=22)
Person(name=小t, age=30)
Person(name=小L, age=36)

我们会发现使用sort(List list)方法侵入性比较高,所以不建议使用这个方法,我们可以使用它的重载的sort(List list, Comparator<? super T> c)方法,以匿名内部类的方式传入构造器来完成排序,上面的例子使用此方法演示如下:
 
 Person类:

@Data
public class Person {public Person(String name, Integer age) {this.name = name;this.age = age;}private String name;private Integer age;}

测试代码:

 Person p1 = new Person("小王",22);Person p2 = new Person("小m",20);Person p3 = new Person("小t",30);Person p4 = new Person("小q",19);Person p5 = new Person("小u",20);Person p6 = new Person("小L",36);List<Person> list = new ArrayList<>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);list.add(p5);list.add(p6);System.out.println("未排序之前>>>:");list.forEach(System.out::println);//自定义排序,这里我按招年龄从小到大排序Collections.sort(list, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.getAge().compareTo(o2.getAge());}});System.out.println("自定义排序之后>>>:");list.forEach(System.out::println);

结果和上一种方法是一样的;

仅供参考!!!感谢阅读!!!欢迎指正!!!!

Java 集合之给ArrayList排序相关推荐

  1. 按照姓名升序排序的代码_好程序员Java培训分享Java集合的两种排序方法

    好程序员Java培训分享Java集合的两种排序方法,Java集合的工具类Collections中提供了两种排序的方法,分别是: 1.Collections.sort(List list) 2.Coll ...

  2. 【重难点】【Java集合 03】ArrayList、LinkedList、 Vector 和 Stack 的区别、CopyOnWriteArrayList

    [重难点][Java集合 03]ArrayList.LinkedList 和 Vector 的区别.util 包下的 List.CopyOnWriteArrayList 文章目录 [重难点][Java ...

  3. 【Java集合框架】ArrayList类方法简明解析(举例说明)

    本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...

  4. 【Java集合系列】---ArrayList

    开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...

  5. 三十二、Java集合中的ArrayList

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  6. Java集合框架:ArrayList

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. java集合框架02——ArrayList和源码分析

    上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而ArrayList又是List中最为常用的,因此本章先学习 ...

  8. Java集合框架:List排序,compareTo,compare使用

    comparable 和 Comparator 的区别 comparable 接⼝实际上是出⾃java.lang 包 它有⼀个 compareTo(Object obj) ⽅法⽤来排序comparat ...

  9. java 集合中对象的排序 和去重

    对list 集合对象中 重复度数据进行排序 1.实体类 中 实现 Comparable 接口中的compareTo 方法 用 什么来比较 集合中的排序 2.对集合中的的对象进行去重,重写 hashCo ...

最新文章

  1. markdown 图片居中_Markdown更改字体、颜色、大小,插入表格等方法
  2. Pycharm显示行号,修改字号大小
  3. 返回值被忽略_《Jenkins Tips 001》 忽略 Shell 步骤中的故障
  4. ×××须避开的高薪杀手
  5. String reverse方法
  6. element-ui下拉框数据双向绑定
  7. Visual Studio 2013各个版本下载地址
  8. 三菱FX5U和变频器走485通讯连接,程序是FB块写好的,硬件一样可以直接调用
  9. ncsi信号测试软件,02-附录
  10. awk&sed替换字符串
  11. 吞食天地2忘云殇8.77图文攻略
  12. liteon460w服务器电源管理系统,【LITEON PS-2112-5L 1200W C6100 C6220 C6220I服务器电源】价格_厂家 - 中国供应商...
  13. Excel读写工具类
  14. Hive 性能调优大全
  15. 幼儿园教师计算机运用论文,幼儿园信息化论文范文
  16. 服务器appcrash的问题怎么修复,win7的ie出现APPCRASH问题怎么处理?
  17. 【GlobalMapper精品教程】035:用CASS自带数据创建高程地形、等高线教程
  18. STM32入门指南:了解STM32
  19. 银行核心系统:“交易(Transaction)”是什么?
  20. 基于PHP+MySQL的仓库管理系统

热门文章

  1. 【Python基础】Python全栈体系(一)
  2. 商业银行的绿色信贷、小微企业贷款余额等指标数据(2011-2020年)
  3. 支持分数显示的计算器,总算给我找着了
  4. java 文件夹目录_java如何取得文件夹下所有的子目录
  5. Greenplum数据库故障分析——能对数据库base文件夹进行软连接嘛?
  6. Google的中文名字应该叫什么?
  7. 深入浅出,一文详解*毫米波*雷达原理及应用技术
  8. 基于51单片机射频RFID卡考勤上课上班统计设计
  9. 推动Windows的限制:分页和非分页池
  10. 面试笔试:计算机网络