Collections.sort()方法给集合排序

  • 前言

因为Collections里面的sort()方法是静态方法,所以可以直接类名打点调用sort方法

  • Collections.sort()有两种参数形式
    第一种形式
//第一种形式Connections.sort(List<T> list)
/*情况一:传入数据内容只有一种数据类型且该类型数据已实现了Comparable接口,并重写了CompareTo方法*/ArrayList<String> strs = new ArrayList<String>();//创建一个集合strs.add("hjk");//添加数据strs.add("bcd");Collections.sort(strs);//进行排序for (String str : strs) {//增强for循环遍历输出System.out.println(str+"  ");}//结果:aaa//     bbb
/*情况二:传入数据的内容是多种数据(比如自己写的类)那么要自己实现Comparable接口,并重写CompareTo方法*///Student为自己创建的类(有姓名,年龄,学号属性)ArrayList<Student>    stus = new ArrayList<Student>();//声明一个集合Student stu1 = new Student("zhangsan",20,"S001");//创建Student对象Student stu2 = new Student("lisi",21,"S002");Student stu3 = new Student("wangwu",22,"S003");stus.add(stu1);//向集合中添加对象stus.add(stu2);stus.add(stu3); Collections.sort(stus);//排序,此时如果没有实现Comparable接口,并重写CompareTo方法,会报红波浪线错误//Student类需要实现Comparable接口,并重写方法/*返回值有三种,正数,负数和零返回零表示相等返回正数前面大于后面返回负数后面大于前面*/public int compareTo(Student o) {//因为Student有三种元素所以可以写三种排序方式但是只能选择其中一种来进行排序//给name排序int value = this.getName().compareTo(o.getName());//给age排序//int value = this.getAge()-o.getAge();//给stuNO//int value = this.getStuNo().compareTo(o.getStuNo());return value;}/*实现过程:Connections.sort()方法调用了list.sort(null)方法并传入参数null,在list.sort()方法中,把集合转换成一个Object数组a在调用数组排序Arrays.sort(a,null);在此方法中,首先判断后面参数为null,所以调用Array里面的sort()方法在此方法中调用ComparableTimSort.sort()方法,在调用binarySort()方法在binarySort()方法中将Object对象用Comparable接口的引用缩小范围,再用Comparable的引用打点调用compareTo的方法(以长辈的引用打点调用子辈重写的方法是多态)*/

第二种形式

//第一种形式Connections.sort(List<T> list, Comparator<? super T>);
//第二个参数是一个比较器接口,可以同时实现多种排序原则
//这是一个准备集合的类其中Teacher为自己写的类(有姓名,年龄,薪水属性)
public List<Teacher> getTeachers(){ArrayList<Teacher> teas = new ArrayList<Teacher>();Teacher tea1 = new Teacher("张三",21,18000);Teacher tea2 = new Teacher("李四",20,15000);Teacher tea3 = new Teacher("王五",22,20000);teas.add(tea1);teas.add(tea2);teas.add(tea3);return teas;}//排序,根据指定Comparator的排序原则,按名称排序的策略实现public void sortName(List<Teacher> teas){//多态:以长辈作为方法的参数Collections.sort(teas,new Comparator<Teacher>(){//匿名内部类//回调函数@Overridepublic int compare(Teacher o1, Teacher o2) {int value = o1.getName().compareTo(o2.getName());return value;}});}//排序,根据指定Comparator的排序原则,按年龄排序的策略实现public void sortAge(List<Teacher> teas){Collections.sort(teas,new Comparator<Teacher>(){@Overridepublic int compare(Teacher o1, Teacher o2) {int value = o1.getAge() - o2.getAge();return value;}});}/*所用到的知识点:(了解)策略设计模式,按照不同的策略实现排序效果多态:以Comparator接口作为sort()方法的参数匿名内部类:在sort方法的内部直接重写Compartor接口里面的compare方法回调函数:Collections的类调用sort()方法,在这个sort放里面在调用List的srot(c)方法,在List的srot()方法里面调用toArray()方法将集合中的元素转换成一个Object数组,在调用Arrays.sort()方法数组排序Arrays.sort(a,c)方法中有两个参数,在此方法中有一个判断,c不为bull所以执行else里面的TimSort.sort方法在TimSort.sort()方发里面调用TimSort类里面的binarySort(),最后在binarySort()里面回调自己所写的排序策略里面的compare()方法,这就是回调函数的回调流程*/

总结

第一次对一个方法的源码找到,这么深,可能自己的理解有一些错误,欢迎大家评论,帮我就纠正错误,我会努力完善的

Collections.sort()方法给集合排序相关推荐

  1. 怎么Collections.sort()方法进行List排序

    一.Collections.sort()从小到大排序:Collections.sort(list); List<Integer> list = new ArrayList<Integ ...

  2. Collections.sort方法对list排序的两种方式

    最近在工作中用到对地震等各种条件的排序,这里刚好用到了这个方法,我用的第二种方法   下面请参考 Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 . 规则用来判断 ...

  3. Collections.sort()方法对象排序

    Collections.sort()方法可以对List对象进行排序,用户需要按特定属性进行排序,有两种实现方法: 1. public static <T extends Comparable&l ...

  4. 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序

    Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...

  5. Collections.sort()方法为List集合内对象进行排序

    此处算是做一个笔记吧,我怕忘了. 对于List排序我们用的还是不少,我们平常都是用的Collections.sort()的方法,对于我们所需要排序的List内的对象是有要求的.那就是必须要实现Comp ...

  6. Java Collections.sort方法对list集合排序

    1.排序测试类 package com.ljq.test;import java.util.ArrayList; import java.util.Collections; import java.u ...

  7. java 集合排序方法_java集合排序方法sort的使用

    转自  http://blog.csdn.net/a1165117473/article/details/6965652 /* * To change this template, choose To ...

  8. 使用Arrays sort 方法進行排序

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! impo ...

  9. Python list sort方法:列表排序

    目录 描述 语法 使用示例 对列表进行排序 指定权值 逆序排序 注意事项 改变原列表顺序 2. 列表元素类型不一致 3. Python早些版本 描述 list.sort方法是Python的列表方法,用 ...

最新文章

  1. 南京晓庄学院java实验五_讲座|城市文化与南京世界“文学之都”的建设
  2. 编译linux内核时出错
  3. php 四维数组_PHP 多维数组
  4. 入微:探究文档中找不到的12c并行索引扫描新特性
  5. 验证邮箱是否合法php,验证邮箱字段是否合法
  6. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_18、SpringBoot测试进阶高级篇之MockMvc讲解...
  7. interface Ethernet 0/0/0 和interface GigabitEthernet 1/0/0
  8. 如何在Tomcat后台通过文件上传getshell总结(个人学习笔记思路)
  9. LeetCode初级算法之数组:36 有效数独
  10. 安装python环境以及安装pycharm编译器教程
  11. 315线上知识竞赛答题活动方案及模板分享
  12. 一款可以帮助你处理文字、编写内容等办公软件-Word 2013 提供下载
  13. 生活杂谈之万网域名注册过程详解
  14. r语言抓取维基百科表格数据
  15. P6111 [USACO18JAN]MooTube S
  16. 2022年推荐消防标准规范汇编自动喷水灭火系统消防设施标志设计规程(附件中为网盘链接),共267份,1.75G
  17. 19 Python __dict__与dir()区别
  18. xshell 密钥key登陆,和密码登陆
  19. python批量修改excel单元格内容
  20. html游戏背景音效,互动游戏用的背景音乐 60首让现场嗨爆的歌曲分享

热门文章

  1. SQL 数据类型 汇总
  2. h5页面调用用户手机打电话功能以及复制内容到剪切板
  3. CodeForces 922B Magic Forest 打表
  4. Python的基本知识与安装
  5. Caption Anything:细粒度可控的图像描述,试试解读清明上河图!
  6. Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配
  7. WPF TreeView,Expander样式使用
  8. LED拼接显示屏的某一块黑屏
  9. 198个经典C#WinForm实例源码(超赞)
  10. 2021天梯赛L2题解全集