java中实现对象排序的两种方法(Comparable,Comparator)

 更新时间:2022年12月13日 10:03:45   作者:穆雄雄  
这篇文章主要给大家介绍了关于java中实现对象排序的两种方法,一种是实现Comparable进行排序,另一种是实现Comparator进行排序,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言:

我们知道,在平时做项目的过程中,我们总会用到各种各样的排序,或是升序,或是降序。在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,降序
  @Override
  public 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> {

  @Override
  public int compare(Student o,Student o1) {
    return o1.getName().compareTo(o.getName());
  }
}

接着稍微改一下Collections.sort方法,如下:

Collections.sort(stus,new SortName());

运行结果:

到此,排序完成,最后大家在思考一下,如果name的值为汉字,那么可以按照姓名的首字母倒序排序吗?

总结

到此这篇关于java中实现对象排序的两种方法的文章就介绍到这了,更多相关java对象排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现扫雷游戏示例讲解

    C++实现扫雷游戏示例讲解

    这篇文章主要介绍了C++实现扫雷游戏示例讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Spring AOP实现功能权限校验功能的示例代码

    Spring AOP实现功能权限校验功能的示例代码

    本篇文章主要介绍了Spring AOP实现功能权限校验功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • springboot+vue项目从第一行代码到上线部署全流程

    springboot+vue项目从第一行代码到上线部署全流程

    本文详细介绍了如何从零开始搭建一个基于Spring Boot和Vue.js的前后端分离项目,并涵盖项目需求分析、技术选型、项目结构设计、前后端交互、部署上线等全过程,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Redis介绍和使用场景详解

    Redis介绍和使用场景详解

    这篇文章主要为大家详细介绍了Redis介绍和使用场景,需要的朋友可以参考,具体内容如下
    2018-04-04
  • Java编程中ArrayList源码分析

    Java编程中ArrayList源码分析

    这篇文章主要介绍了Java编程中ArrayList源码分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java中将bean放入Spring容器中的几种方式详解

    Java中将bean放入Spring容器中的几种方式详解

    这篇文章主要介绍了Java中将bean放入Spring容器中的几种方式详解,在Spring框架中,有多种方式可以将Bean(即对象)放入Spring容器中,今天我们就来详细说一下这几种方式,需要的朋友可以参考下
    2023-07-07
  • JAVA 日常开发中Websocket示例详解

    JAVA 日常开发中Websocket示例详解

    JAVA |日常开发中Websocket详解,WebSocket是一种在单个TCP连接上进行全双工通信的协议,它在Web应用中实现了客户端与服务器之间的实时数据传输,本文将详细介绍Java开发中WebSocket的使用,包括基本概念、Java API、使用示例以及注意事项,感兴趣的朋友一起看看吧
    2024-12-12
  • Netty分布式pipeline管道异常传播事件源码解析

    Netty分布式pipeline管道异常传播事件源码解析

    这篇文章主要为大家介绍了Netty分布式pipeline管道异常传播事件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 解决nacos项目启动报错:Connection refused: no further informa问题

    解决nacos项目启动报错:Connection refused: no further&

    这篇文章主要介绍了解决nacos项目启动报错:Connection refused: no further informa问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java HtmlParse提取标签中的值操作

    Java HtmlParse提取标签中的值操作

    这篇文章主要介绍了Java HtmlParse提取标签中的值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论