java compare compareTo方法区别详解

yizhihongxing

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日

相关文章

  • struts2过滤器和拦截器的区别分析

    针对网站的访问安全问题,很多网站采取了过滤器和拦截器的方法来进行控制,而在struts2框架中也存在两种安全控制机制:过滤器(Filter)和拦截器(Interceptor)。下面,我将从以下几个方面对这两种机制进行分析,希望对你有所帮助。 过滤器(Filter)和拦截器(Interceptor)的概念 过滤器(Filter)是一种Servlet技术,可以拦…

    Java 2023年5月20日
    00
  • MyBatis如何使用(二)

    下面是“MyBatis如何使用(二)”的完整攻略: MyBatis如何使用(二) 在上一篇文章中,我们学习了MyBatis的基本概念和使用方法。本篇文章将进一步介绍如何使用MyBatis进行数据操作。 数据库连接配置 在使用MyBatis进行数据操作前,我们需要先进行数据库连接配置。在MyBatis中,数据库连接信息是通过配置文件来管理的。下面是一个示例的配…

    Java 2023年6月1日
    00
  • Java面试题冲刺第三天–集合框架篇

    让我来为您详细讲解“Java面试题冲刺第三天–集合框架篇”的完整攻略。 一、前言 集合框架是Java编程中的重要一环,作为Java工程师,在面试中对集合框架要有深刻的理解。本篇文章将为您提供Java集合框架面试题的完整攻略,帮助您在面试中脱颖而出。 二、集合框架概述 集合框架是Java中的一组接口、实现类和算法,用于存储和操作一组对象。在Java编程中,集…

    Java 2023年5月19日
    00
  • 非常不错的[JS]Cookie精通之路

    “非常不错的[JS]Cookie精通之路”攻略 什么是 Cookie Cookie是一种用于跟踪网站访问者并存储其首选项的技术。它是由服务器发送给客户端(即浏览器)的小文本文件。该文件由客户端存储,并在每次请求该网站时发送回服务器。Cookie通常用于存储用户的会话ID、购物车数据、用户首选项等信息。 创建 Cookie 在JavaScript中,使用doc…

    Java 2023年6月15日
    00
  • java类实现日期的时间差的实例讲解

    Java 类实现日期的时间差的实例讲解 在Java中,我们可以通过使用Java类库提供的Date和Calendar类来处理日期和时间。这些类提供了一些方法,可以用于计算两个日期之间的时间差。 使用Date类实现日期的时间差 以下是使用Date类实现日期的时间差的示例代码: package com.example.date; import java.util.…

    Java 2023年5月20日
    00
  • Spring多个数据源配置详解

    Spring 多数据源配置是在一个应用程序里使用不同的数据源连接数据库,通过配置多个数据源,实现不同模块、不同业务区分对应的数据库连接。下面是详细攻略: 1. 添加依赖 首先在 pom.xml 文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId&g…

    Java 2023年5月20日
    00
  • SpringBoot+MybatisPlus+Mysql+JSP实战

    以下是关于SpringBoot+MybatisPlus+Mysql+JSP实战的完整攻略,内容包括环境搭建、数据库操作、页面渲染等: 环境搭建 安装JDK、Maven等开发环境。 创建一个SpringBoot项目,可以使用Spring Initializr或者IDEA等工具快速创建。 在项目的pom.xml文件中添加mybatis-plus和mysql依赖,…

    Java 2023年5月20日
    00
  • 用java实现扫雷游戏

    实现扫雷游戏,需要以下步骤: 第一步:准备工作 创建项目并添加所需的依赖包。可以使用Maven或Gradle构建工具来管理项目依赖。 第二步:创建游戏界面 使用Java的图形用户界面(GUI)工具包,如Swing或JavaFX,创建游戏界面。界面应该有菜单栏和工具栏,显示游戏区域的面板,以及状态栏等组件。 第三步:初始化游戏 在游戏开始时,需要初始化游戏数据…

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