当前位置: 首页 > news >正文

java collections.sort 从大到小_Java中Collections.sort()的用法

Java中Collections.sort()的使用:

在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是可比较的。

怎么让一个对象是 可比较的,那就需要该对象实现 Comparable 接口啦。然后重写里面的

compareTo()方法。我们可以看到Java中很多类都是实现类这个接口的 如:Integer,Long 等等。。。

假设我们有一个学生类,默认需要按学生的年龄字段 age 进行排序 代码如下:

public class Student implements Comparable {

private int id;

private int age;

private String name;

public Student(int id, int age, String name) {

this.id = id;

this.age = age;

this.name = name;

}

@Override

public int compareTo(Student o) {

//降序

//return o.age - this.age;

//升序

return this.age - o.age;

}

@Override

public String toString() {

return "Student{" +

"id=" + id +

", age=" + age +

", name='" + name + '\'' +

'}';

}

}

这里说一下重写的 public int compareTo(Student o){} 这个方法,它返回三种 int 类型的值: 负整数,零 ,正整数。

format,png

测试代码:

public static void main(String args[]){

List list = new ArrayList<>();

list.add(new Student(1,25,"关羽"));

list.add(new Student(2,21,"张飞"));

list.add(new Student(3,18,"刘备"));

list.add(new Student(4,32,"袁绍"));

list.add(new Student(5,36,"赵云"));

list.add(new Student(6,16,"曹操"));

System.out.println("排序前:");

for (Student student : list) {

System.out.println(student.toString());

}

//使用默认排序

Collections.sort(list);

System.out.println("默认排序后:");

for (Student student : list) {

System.out.println(student.toString());

}

}

输出日志:

排序前:

Student{id=1, age=25, name='关羽'}

Student{id=2, age=21, name='张飞'}

Student{id=3, age=18, name='刘备'}

Student{id=4, age=32, name='袁绍'}

Student{id=5, age=36, name='赵云'}

Student{id=6, age=16, name='曹操'}

默认排序后:

Student{id=6, age=16, name='曹操'}

Student{id=3, age=18, name='刘备'}

Student{id=2, age=21, name='张飞'}

Student{id=1, age=25, name='关羽'}

Student{id=4, age=32, name='袁绍'}

Student{id=5, age=36, name='赵云'}

比较器的使用:

这个时候需求又来了,默认是用 age 排序,但是有的时候需要用 id 来排序怎么办? 这个时候比较器 :Comparator 就排上用场了。

Comparator 的使用有两种方式:

Collections.sort(list,Comparator);

list.sort(Comparator);

其实主要是看 Comparator 接口的实现,重写里面的 compare 方法。代码如下:

//自定义排序1

Collections.sort(list, new Comparator() {

@Override

public int compare(Student o1, Student o2) {

return o1.getId() - o2.getId();

}

});

compare(Student o1, Student o2) 方法的返回值跟 Comparable<> 接口中的 compareTo(Student o) 方法 返回值意思相同。另一种写法如下:

//自定义排序2

list.sort(new Comparator() {

@Override

public int compare(Student o1, Student o2) {

return o1.getId() - o2.getId();

}

});

输出日志:

排序前:

Student{id=1, age=25, name='关羽'}

Student{id=2, age=21, name='张飞'}

Student{id=3, age=18, name='刘备'}

Student{id=4, age=32, name='袁绍'}

Student{id=5, age=36, name='赵云'}

Student{id=6, age=16, name='曹操'}

自定义排序后:

Student{id=1, age=25, name='关羽'}

Student{id=2, age=21, name='张飞'}

Student{id=3, age=18, name='刘备'}

Student{id=4, age=32, name='袁绍'}

Student{id=5, age=36, name='赵云'}

Student{id=6, age=16, name='曹操'}

欢迎关注微信公众号“Java面试达人”,(id:javasuperman),收看更多精彩内容

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Windows Embedded从入门到精通课程介绍
  • java基础反射知识总结_java基础反射知识总结
  • 是什么让你萌发了跳槽的念头?
  • java汉字如何通过字节传输_java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式...
  • 《赢在用户》——UI设计的启蒙书
  • XML 路径语言(XPath) 版本 1.0
  • JAVA猜测随机整数_Java程序设计:产生随机数,让用户猜测
  • addslashes php,PHP如何使用addslashes()函数?(代码示例)
  • OWB和ODM的产品信息
  • sumblime text3写php,Sublime Text3及Phpstorm开发工具的代码片段管理
  • 软件技术大会演讲题目敲定:《领域驱动设计在大规模项目中的应用实践》
  • php icouv,PHP_简单谈谈favicon,favicon.ico介绍 favicon.ico是个什 - phpStudy
  • 触发器的简单应用
  • opencart mail.php,opencart联系表单邮件失败的解决办法
  • 创业者应避免的六件事
  • Angular 4.x 动态创建组件
  • CODING 缺陷管理功能正式开始公测
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • fetch 从初识到应用
  • java中的hashCode
  • JS实现简单的MVC模式开发小游戏
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • text-decoration与color属性
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 成为一名优秀的Developer的书单
  • 从伪并行的 Python 多线程说起
  • 关于使用markdown的方法(引自CSDN教程)
  • 聚簇索引和非聚簇索引
  • 微信支付JSAPI,实测!终极方案
  • 携程小程序初体验
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计大学生兼职系统
  • (接口封装)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (四)模仿学习-完成后台管理页面查询
  • (转)nsfocus-绿盟科技笔试题目
  • ../depcomp: line 571: exec: g++: not found
  • .gitignore文件使用
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net Application的目录
  • .net core docker部署教程和细节问题
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net的C#语言取月份数值对应的MonthName值