大家好,我是雄雄。

前言:

我们知道,在平时做项目的过程中,我们总会用到各种各样的排序,或是升序,或是降序。在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中如何对对象排序?相关推荐

  1. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一些讲 ...

  2. [转载] java中对数组进行排序_如何在Java中对数组排序

    参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...

  3. java对列表数据排序_如何在Java中对列表进行排序

    java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...

  4. java中对数组进行排序_如何在Java中对数组排序

    java中对数组进行排序 Java Array is like a container that can hold a fixed number of the same type of items, ...

  5. JAVA中JVM的重排序详细介绍(写得很明白)

    刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...

  6. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  7. java中的五种排序方法_用Java排序的五种有用方法

    java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...

  8. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  9. Java中的dozer对象转换

    Java中的dozer对象转换 1.dozer介绍 Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象. dozer是用来对两个对象之间属性转换的工 ...

最新文章

  1. matlab生成多组多维高斯分布数据
  2. dialog像父activity传递参数
  3. 微信小程序开发之普通链接二维码
  4. Python Turtle画分形树理解递归
  5. 决策树的python实现
  6. 对vue-tree-select的封装
  7. nginx访问页面 中文乱码 解决方案
  8. 面试的那些事(收藏类)
  9. com.haodf.android,有坑!Android新版QQ获取packageInfo引发异常崩溃
  10. CentOS服务器上搭建Gitlab安装步骤、中文汉化详细步骤、日常管理以及异常故障排查
  11. nginx 做代理转发 对文件上传下载有影响速度吗_少年: Nginx了解下
  12. 重启tomcat服务器步骤
  13. 崔荣容,英语如法入门1-50讲
  14. 扩容内存卡用mydisktest失效,教你怎么用USBoot恢复出真实容量
  15. 2020-09-13 滴滴-2021校招在线笔试-DE数据开发试卷
  16. 公开我的 星际帝国 辅助程序源代码
  17. php批量获得经纬度,批量调用百度地图API获取地址经纬度坐标
  18. delphi控件切图界面闪烁_8、控件系列之_加载占位图+页面指示器
  19. 纯JS打造移动端触屏滑动图片集
  20. Camtasia2020视频录制软件的安装及pj顶级屏幕录像视频编辑软件

热门文章

  1. ajax alert表单,jQuery AJAX Post alert()不被调用
  2. python升级pip在哪儿打开_Linux下升级python和安装pip的详解
  3. HDU 6061 RXD and functions(NTT)
  4. P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组
  5. 斜率优化Convex Hull Trick
  6. CF1253F Cheap Robot
  7. Sum of Paths CodeForces - 1467D
  8. P5039 [SHOI2010]最小生成树(网络流)
  9. 不止代码:恐狼后卫(ybtoj-区间dp)
  10. CF1556E-Equilibrium【栈,树状数组】