java compare compareTo方法区别详解

Java CompareTo方法区别详解

什么是Java CompareTo方法?

CompareTo()是Java中一个比较方法,用于对两个对象进行比较。在Java中,对象可以比较大小。如果Object A比Object B大,则compareTo()会返回一个正值。如果Object A比Object B小,则compareTo()会返回一个负的值。如果两个Object相等,则返回0.

为什么要使用CompareTo方法?

CompareTo()方法的主要目的是对象排序。它可以帮助我们对一个集合进行排序。例如,如果我们有一个保存学生列表的ArrayList,我们可以使用CompareTo()方法对它们按照学号进行排序。

CompareTo()方法的用法

我们来看一下如何使用CompareTo()方法

定义一个类

首先我们需要定义一个类。例如我们定义了一个名为Student的类,它有两个属性:学号和姓名。

public class Student implements Comparable<Student> {

    private String studentName;
    private int studentNumber;

    public Student(String studentName, int studentNumber){
        this.studentName = studentName;
        this.studentNumber = studentNumber;
    }

    // getters and setters

    @Override
    public int compareTo(Student otherStudent) {
        return this.studentNumber - otherStudent.studentNumber;
    }
}

实例化类

现在我们需要实例化这个类。

Student s1 = new Student("Tom", 100);
Student s2 = new Student("Jerry", 80);

比较两个对象的大小

比较两个对象的大小需要使用CompareTo()方法。

int result = s1.compareTo(s2);

如果s1的学号比s2大,则result是一个正值。如果s1的学号比s2小,则result是一个负值。如果两个学号相等,则result会是0.

CompareTo()方法的常见错误

在使用CompareTo()方法时,会经常犯一些错误,例如:

  1. 忘记实现Comparable接口

比如上面的例子,我们开头就写了Student类实现Comparable接口。如果忘记了这一步,程序就无法编译通过。

  1. 返回值错误

如果我们的CompareTo()方法返回值是一个负数,但是我们希望对象是相等的,那么就会出现问题。

示例说明

考虑一个Person类,它由姓名、年龄、身高三个属性组成。

public class Person implements Comparable<Person>{
    private String name;
    private int age;
    private int height;

    public Person(String name,int age,int height){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public int getHeight(){
        return height;
    }

    @Override
    public int compareTo(Person o) {
        int compareResult= Integer.compare(this.age,o.getAge());
        if(compareResult==0){
            compareResult= Integer.compare(this.height,o.getHeight());
        }
        if(compareResult==0){
            compareResult= name.compareTo(o.getName());
        }
        return compareResult;
    }
}

我们创建了一个包含三个属性的Person类,并在compareTo()方法中通过三个属性的值作为排序的依据。

class PersonSortingUtility{
    public static void main(String[] args) {
        List<Person> personList =new ArrayList<Person>();
        personList.add(new Person("Mike",23,175));
        personList.add(new Person("John",20,174));
        personList.add(new Person("David",20,183));
        personList.add(new Person("Mike",25,175));

        System.out.println("Before sorting : " + personList);
        Collections.sort(personList,Person::compareTo);
        System.out.println("After sorting : " + personList);
    }
}

排序后结果为:

Before sorting : [Person{name='Mike', age=23, height=175}, Person{name='John', age=20, height=174}, Person{name='David', age=20, height=183}, Person{name='Mike', age=25, height=175}]
After sorting : [Person{name='David', age=20, height=183}, Person{name='John', age=20, height=174}, Person{name='Mike', age=23, height=175}, Person{name='Mike', age=25, height=175}]

可以看到,排序前按照添加的顺序输出,排序后按照age、height、name的顺序排序。

总结

通过这篇教程,我们学习了Java CompareTo()方法的用法和示例,可以帮助我们更好地理解Comparable接口和比较对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java compare compareTo方法区别详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring Security如何优雅的增加OAuth2协议授权模式

    下面是关于“Spring Security如何优雅的增加OAuth2协议授权模式”的完整攻略。 什么是OAuth2协议授权模式 OAuth2是一个开放标准协议,用于授权第三方应用访问用户在某个服务提供商上存储的资源。OAuth2协议有四种授权模式,分别是: 授权码模式(authorization code) 简化模式(implicit) 密码模式(resou…

    Java 2023年5月20日
    00
  • 微信小程序实现人脸识别登陆的示例代码

    首先要说明的是微信小程序实现人脸识别登陆需要依赖于第三方人脸识别的API,比如阿里云人脸识别API、百度AI人脸识别API等。以下以阿里云人脸识别API为例,讲解微信小程序实现人脸识别登陆的步骤。 注册阿里云账号并开通人脸识别API在阿里云官网注册账号并登录后,进入人脸识别产品页,点击“立即登录/注册”进入API管理控制台,按照指引完成API开通与认证流程,…

    Java 2023年5月23日
    00
  • Java内部类的使用教程详解

    Java内部类的使用教程详解 Java中的内部类是一个非常神奇的特性,它允许我们在一个Java类中定义另一个Java类。在这篇文章中,我们会详细讲解Java内部类的使用方法和注意事项。 内部类的类型 Java中的内部类分为四种类型:静态内部类、非静态内部类、局部内部类和匿名内部类。 静态内部类 静态内部类是定义在类中的普通静态类,可以像普通类一样使用。它可以…

    Java 2023年5月19日
    00
  • 关于struts返回对象json格式数据的方法

    关于struts返回对象json格式数据的方法即为使用Struts框架来实现向前端返回JSON格式数据。在Struts框架中,可以使用自带的JSON插件来实现此功能。 具体步骤如下: 步骤一:添加struts-json插件 在Struts的配置文件中添加如下的插件配置: <struts> <constant name="strut…

    Java 2023年5月20日
    00
  • springboot 接口返回字符串带引号的问题解决

    在Spring Boot中,当我们返回一个字符串时,有时候会出现带引号的问题。这个问题通常是由于Jackson库的默认配置导致的。在本文中,我们将详细讲解如何解决这个问题,并提供两个示例来说明如何使用这个解决方案。 解决方案 要解决这个问题,我们需要在Spring Boot应用程序中配置Jackson库的行为。具体来说,我们需要将Jackson库的默认配置更…

    Java 2023年5月18日
    00
  • Java毕业设计实战之共享租车信息管理系统的实现

    Java毕业设计实战之共享租车信息管理系统的实现 共享租车信息管理系统是一个基于Java的Web应用程序,它的主要作用是对租赁车辆进行管理和查询。本文将详细讲解实现该系统的完整攻略。 系统需求 在开始实现前,需要先明确系统的需求: 用户可以注册账号或使用已有账号登录系统; 用户可以浏览车辆信息,包含车辆图片、基本信息、租赁费用等; 用户可以选择租赁车辆,并提…

    Java 2023年5月24日
    00
  • java创建一个类实现读取一个文件中的每一行显示出来

    下面是详细的攻略: 创建一个Java类 首先,要在Java中创建一个类来实现读取文件中每一行并显示出来。在这个类中,我们需要使用Java的文件读取API以及循环来逐行读取文件中的内容并将其显示出来。 public class FileReadExample { public static void main(String[] args) { try { //…

    Java 2023年5月19日
    00
  • Servlet服务端实现原理详解

    一、Servlet服务端实现原理 在Web应用中,服务端可以通过Java的Servlet技术实现对客户端(浏览器)的响应。Servlet是运行在服务端的Java程序,实现了应用服务器与客户端(浏览器)之间的通讯和数据交换。Servlet是一种通用的、基于Java的服务器端组件技术,它是在服务器端动态生成Web页面或进行数据处理的主要手段之一。 Servlet…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部