大家好,我是雄雄。
前言:
我们知道,在平时做项目的过程中,我们总会用到各种各样的排序,或是升序,或是降序。在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
点分享
点点赞
点在看