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

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1196 ssl1225-银河英雄传说【图论,并查集】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1196 大意 有30000列和30000个飞船&#xff0c;开始时i号飞船在i列上。有两种操作&#xff1a; &#xff08;1&#xff09;将x所在的列上的所有飞船连接在y号飞船所在的列上 &#xff08;2&#xff09;…

Java程序员必看的 13 本 Java 书籍

转载自 Java程序员必看的 13 本 Java 书籍 关乎于程序员&#xff0c;除了做项目来提高自身的技术&#xff0c;还有一种提升自己的专业技能就是&#xff1a;多&#xff01;看&#xff01;书&#xff01; 毕竟&#xff0c;书是学习的海洋呢&#xff01;So&#xff0c;Java程序…

python常见内置函数

abs # 求绝对值 all #Return True if bool(x) is True for all values x in the iterable.If the iterable is empty, return True. any #Return True if bool(x) is True for any x in the iterable.If the iterable is empty, return False. ascii #Return an ASCII-on…

祝你生日快乐!

祝生日快乐今天&#xff0c;于我来说是个特别的日子。本来&#xff0c;我是比较低调的&#xff0c;尤其是对于生日来说&#xff0c;可以说是这些年都没有好好的过过&#xff0c;要么忘记了&#xff0c;要么就是在异国他乡的&#xff0c;谁都不识&#xff0c;这一天和往常的一天…

P1892-团伙【图论,并查集】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1892 大意 两个人如果认识就只有两种关系&#xff0c;敌人或朋友 而&#xff1a; 朋友的朋友是朋友 敌人的敌人是朋友 &#xff08;敌人之间也可能是敌人&#xff09; 求团伙总数 解题思路 就像做食…

.NET Exceptionless 日志收集框架本地环境搭建

一、简介 Exceptionless 是一个开源的实时的日志收集框架&#xff0c;它可以应用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web Api&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;MVC 等技术栈的应用程序中&#xff0c;并且提供了Rest接口可以…

Redis 常用操作命令,非常详细

转载自 Redis 常用操作命令&#xff0c;非常详细 下面总结并演示了 Redis 的 常用管理命令、key 操作、字符串、集合、列表、散列类型的操作命令。 你需要掌握的 Redis 知识 史上最全 Redis 高可用解决方案总结 为什么分布式一定要有Redis? Spring Boot Redis Cluster 实…

java中如何对汉字进行排序?

前言&#xff1a;上一篇文章我们讲解了java中实现Comparator进行排序 和实现Comparable进行排序&#xff0c;我们分别举例根据学号和姓名降序排序&#xff0c;原文在这里&#xff1a;java中如何对对象排序&#xff1f; &#xff0c;不过在文章的最后&#xff0c;我故意留了个问…

Blazor将.NET带回到浏览器

由Steve Sanderson开发的Blazor尝试使用WebAssembly和DotNetAnywhere将.NET带回到浏览器。它不是要成为一个像Flash或Silverlight那样的完整生产框架&#xff0c;而是要探索一下有什么可能性。 WebAssembly将自己描述成一个“内存安全的沙箱执行环境”标准&#xff0c;它“甚至…

ssl2342-打击犯罪【并查集】

正题 大意 有n个犯罪团伙&#xff0c;他们之间可以相互联系&#xff0c;按照1到n的顺序打击&#xff0c;求最少打击多少个犯罪团伙可以使多个犯罪团伙组成的已经无法与外联系的团伙最大的那个不超过n/2。 解题思路 先储存每条连接的路径&#xff0c;然后从n枚举到1&#xff0…

Java 必须掌握的 12 种 Spring 常用注解

转载自 Java 必须掌握的 12 种 Spring 常用注解 1.声明bean的注解 Component 组件&#xff0c;没有明确的角色 Service 在业务逻辑层使用&#xff08;service层&#xff09; Repository 在数据访问层使用&#xff08;dao层&#xff09; Controller 在展现层使用&#xff…

过滤器和监听器

文章目录01 过滤器的简介02 使用过滤器进行乱码解决03 使用过滤器进行登陆的控制04 过滤器更多内容05 监听器实现日志记录06 监听器实现在线人数的统计07 其他监听器使用01 过滤器的简介 为什么使用过滤器&#xff1f; 我们目前书写项目中遇到的问题&#xff1f; A、目前使用的…

高启航:秋运会!

本文原创&#xff1a;高启航&#xff08;本文所有收益均归高启航所有&#xff09;在十月份的二十一号&#xff0c;我们济南信息工程学校迎来了一年一度的秋季运动会。这次秋运会&#xff0c;每一个班级所准备的开幕式、训练已久的千人武术大展演、以及在运动会上表现优越的运动…

用python画出吉祥物

大前提 你需要一个"npy" 效果图 源码 # 库的导入 import turtleturtle.title(PythonBingDwenDwen&#xff08;axing&#xff09;) #这里的字我们可以自己进行修改turtle.speed(10) # 速度&#xff0c;如果觉得20快了&#xff0c;你们可以设置10# 左手 turtle.p…

RabbitMQ知多少

1.引言 RabbitMQ——Rabbit Message Queue的简写&#xff0c;但不能仅仅理解其为消息队列&#xff0c;消息代理更合适。RabbitMQ 是一个由 Erlang 语言开发的AMQP&#xff08;高级消息队列协议&#xff09;的开源实现&#xff0c;其内部结构如下&#xff1a; RabbitMQ作为一个…

分布式系统中处理参数配置的 4 种方案

转载自 分布式系统中处理参数配置的 4 种方案 一个系统中包含有各种各样的配置信息&#xff0c;如一个日志文件需要配置以下几个信息。 日志文件生成主目录 日志文件名称&#xff0c;不同的日志级别对应不同的文件 当前日志级别 还有其他各种业务参数、系统参数等&#x…

P1455-搭配购买【图论,并查集,dp,背包】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1455 大意 有n个商品&#xff0c;给出价值和价格。有m组搭配&#xff0c;如果买了其中一个就得买另一个&#xff0c;给出你拥有的钱&#xff0c;求能获得的最大价值 解题思路 首先用并查集算出每个搭配的…

王宝兴:秋运会

本文原创&#xff1a;王宝兴本文所有收益归王宝兴所有一年一度的运动会如期而至。可谓是“沙场秋点兵”的壮阔&#xff0c;给了我们难以言喻的激情。为了入场式&#xff0c;为了我们每个人&#xff0c;为了我们整个班集体&#xff0c;所有人付出的不止一点&#xff0c;在这短短…

.NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿

一、.NET Core的诞生 聊 .NET Core&#xff0c;就不得不说他的爸爸 .NET。当年Java刚刚兴起&#xff0c;如火如荼&#xff0c;微软也非常推崇Java&#xff0c;当时Windows平台的Java虚拟机就是微软按照JVM标准实现的&#xff0c;据说也是当时性能最好的Java虚拟机。但是微软也…