java中如何对对象排序?
大家好,我是雄雄。
前言:
我们知道,在平时做项目的过程中,我们总会用到各种各样的排序,或是升序,或是降序。在java中,要实现排序有好多中方式,比如我们耳熟能详的冒泡排序、选择排序等,但是我们一般都不用写,JDK给我们提供了好多现成方法供我们使用,今天我们就来看看,java中如何使用Comparator进行排序。
1
实现Comparable进行排序
下面我们来看一个简单的例子:
package org.test;/***
*
* 项目名称:BianChengXiGuan
* 类名称:Student
* 类描述:学生类
* 创建人:Mu Xiongxiong
* 创建时间:2020-10-19 上午8:47:01
* 修改人:Mu Xiongxiong
* 修改时间:2020-10-19 上午8:47:01
* 修改备注:
* 个人博客:https://blog.csdn.net/qq_34137397
* 微信公众号:雄雄的小课堂
* @version
**/
public class Student implements Comparable<Student>{/*** 学生编号*/private int sid;/*** 学生姓名*/private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}/*** * 构造函数 * @discription * @author Mu Xiongxiong * @created 2020-10-19 上午8:47:43 * @param sid* @param name * 个人博客:https://blog.csdn.net/qq_34137397* 微信公众号:雄雄的小课堂*/public Student(int sid, String name) {super();this.sid = sid;this.name = name;}/*** * 构造函数 * @discription * @author Mu Xiongxiong * @created 2020-10-19 上午8:47:48 * 个人博客:https://blog.csdn.net/qq_34137397* 微信公众号:雄雄的小课堂*/public Student() {super();}//接口中必须要实现的方法//按照sid进行排序//如果传过来的sid比本身的sid小的话,返回1,升序//如果传过来的sid比本身的sid大的话,返回-1,降序@Overridepublic int compareTo(Student o) {if(sid>o.sid){return 1;}else if(sid==o.sid){return 0;}else{return -1;}}}
这是一个很简单的Student实体类,其中对字段的封装,以及构造方法就不在这里说明了。重点看compareTo方法,此方法是Comparable接口中的方法,我们实现了Comparable接口之后必须要实现该方法。要实现升序和降序,肯定少不了比较,那么compareTo方法的作用就在此,用来比较的!
代码中,compareTo方法中实现的是按照sid进行排序,如果传过来的sid比本身的sid小的话,返回1,升序。如果传过来的sid比本身的sid大的话,返回-1,降序。然后我们写个测试方法进行测试:
//对集合进行排序public static void testSortList(){List<Student> stus = new ArrayList<Student>();stus.add(new Student(1,"a"));stus.add(new Student(4,"d"));stus.add(new Student(5,"e"));stus.add(new Student(2,"b"));stus.add(new Student(3,"c"));System.out.println("排序之前:");for (Student s : stus) {System.out.println(s.getSid()+"---"+s.getName());}Collections.sort(stus);//Collections.sort(stus,new SortName());System.out.println("排序之后:\n");for (Student s : stus) {System.out.println(s.getSid()+"---"+s.getName());}}
运行结果如下:
这是升序,如果想要降序排序,简单的改一下compareTo方法的比较符号即可。按照sid进行排序,比较简单,那假如现在有这样的需求:按照姓名(字符)顺序降序排序,我们应该怎么实现?
2
实现Comparator进行排序
我们看Collections.sort方法,他还有一个重载方法Collections.sort(Listlists,Comparator c);可以接受一个Comparator实现类,我们就可以利用这一点,实现对name进行排序,代码如下:
package org.test;import java.util.Comparator;public class SortName implements Comparator<Student> {@Overridepublic int compare(Student o,Student o1) {return o1.getName().compareTo(o.getName());}}
接着稍微改一下Collections.sort方法,如下:
Collections.sort(stus,new SortName());
运行结果:
到此,排序完成,最后大家在思考一下,如果name的值为汉字,那么可以按照姓名的首字母倒序排序吗?
往期精彩
畅想小组KTV点歌系统简介
2020-10-19
SQ小组KTV点歌系统简介
2020-10-18
凌云KTV点歌系统功能简介
2020-10-17
注意!在subList生成子列表之后,一定不要随便更改原列表
2020-10-15
神奇!一行代码实现删除某集合下标20-30的元素
2020-10-14
‘小会计’的转行之旅
2020-10-13
子列表只是原列表的一个视图
2020-10-12
点分享
点点赞
点在看
java中如何对对象排序?相关推荐
- (转)java中对集合对象list的几种循环访问总结
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一些讲 ...
- [转载] java中对数组进行排序_如何在Java中对数组排序
参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...
- java对列表数据排序_如何在Java中对列表进行排序
java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...
- java中对数组进行排序_如何在Java中对数组排序
java中对数组进行排序 Java Array is like a container that can hold a fixed number of the same type of items, ...
- JAVA中JVM的重排序详细介绍(写得很明白)
刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...
- java 字符串是对象吗_解析Java中的String对象的数据类型
解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...
- java中的五种排序方法_用Java排序的五种有用方法
java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...
- js解析java对象数组_js接收并转化Java中的数组对象的方法
在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...
- Java中的dozer对象转换
Java中的dozer对象转换 1.dozer介绍 Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象. dozer是用来对两个对象之间属性转换的工 ...
最新文章
- matlab生成多组多维高斯分布数据
- dialog像父activity传递参数
- 微信小程序开发之普通链接二维码
- Python Turtle画分形树理解递归
- 决策树的python实现
- 对vue-tree-select的封装
- nginx访问页面 中文乱码 解决方案
- 面试的那些事(收藏类)
- com.haodf.android,有坑!Android新版QQ获取packageInfo引发异常崩溃
- CentOS服务器上搭建Gitlab安装步骤、中文汉化详细步骤、日常管理以及异常故障排查
- nginx 做代理转发 对文件上传下载有影响速度吗_少年: Nginx了解下
- 重启tomcat服务器步骤
- 崔荣容,英语如法入门1-50讲
- 扩容内存卡用mydisktest失效,教你怎么用USBoot恢复出真实容量
- 2020-09-13 滴滴-2021校招在线笔试-DE数据开发试卷
- 公开我的 星际帝国 辅助程序源代码
- php批量获得经纬度,批量调用百度地图API获取地址经纬度坐标
- delphi控件切图界面闪烁_8、控件系列之_加载占位图+页面指示器
- 纯JS打造移动端触屏滑动图片集
- Camtasia2020视频录制软件的安装及pj顶级屏幕录像视频编辑软件
热门文章
- ajax alert表单,jQuery AJAX Post alert()不被调用
- python升级pip在哪儿打开_Linux下升级python和安装pip的详解
- HDU 6061 RXD and functions(NTT)
- P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组
- 斜率优化Convex Hull Trick
- CF1253F Cheap Robot
- Sum of Paths CodeForces - 1467D
- P5039 [SHOI2010]最小生成树(网络流)
- 不止代码:恐狼后卫(ybtoj-区间dp)
- CF1556E-Equilibrium【栈,树状数组】