首页 > 编程语言 >java~搞懂Comparable接口的compareTo方法

java~搞懂Comparable接口的compareTo方法

时间:2023-06-19 16:12:06浏览次数:46  
标签:Comparable java age score compareTo return 搞懂 排序

Comparable 接口的 compareTo 方法的升序或降序取决于实现该接口的类的具体实现。按照惯例,compareTo 方法应该返回负数、零或正数来指示当前对象是小于、等于还是大于传入的对象。具体来说:

  • 如果 this 对象小于传入的对象,则 compareTo 应该返回负数。
  • 如果 this 对象等于传入的对象,则 compareTo 应该返回零。
  • 如果 this 对象大于传入的对象,则 compareTo 应该返回正数。

通常情况下,这样的实现会使 compareTo 方法按照升序排序。但是,你也可以通过在返回语句中反转比较结果来实现降序排序。这完全取决于具体的实现。

单字段排序

下面是一个示例,演示了一个自定义类 Person 实现了 Comparable 接口,并使用 compareTo 方法按照年龄进行排序:

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

    // 构造函数、getter 和 setter 方法省略

    @Override
    public int compareTo(Person other) {
        // 按照年龄升序排序
        return this.age - other.age;
    }
}

在这个示例中,compareTo 方法返回的结果是根据年龄比较的,如果调用 person1.compareTo(person2),返回的结果将是负数、零或正数,分别表示 person1 的年龄小于、等于或大于 person2 的年龄。

多字段排序

如果涉及到多个字段,比如一个学生类,它有成绩和年纪,先按成绩的降序排序,当成绩相同时,再按着年纪的升序排序,这就需要我们对两个字段进行判断了,如下

   @Override
   public int compareTo(Student o) {
   	if (this.score > o.score)
   		return -1;
   	else if (this.score < o.score)
   		return 1;
   	else {
   		return this.age-o.age;
   	}
   }

或者先判断是否不相同,这样两层if也可以了

	@Override
	public int compareTo(Student o) {
		if (this.score != o.score)
			return (int) (o.score - this.score);
		else
			return this.age - o.age;

	}

总之,Comparable 接口的 compareTo 方法的升序或降序取决于具体的实现,你可以根据需要来决定返回的结果。

标签:Comparable,java,age,score,compareTo,return,搞懂,排序
From: https://www.cnblogs.com/lori/p/17491396.html

相关文章

  • JavaScript的数学计算库:decimal.js
    Anarbitrary-precisionDecimaltypeforJavaScript.功能整数和浮点数简单但功能齐全的API复制JavaScript和对象的许多方法Number.prototypeMath还处理十六进制、二进制和八进制值比Java的BigDecimalJavaScript版本更快,更小,也许更容易使用无依赖关系广泛的平......
  • Java 运算符的使用
    Java运算符的使用1.算术运算符算术运算符包括:+,-,*,/,%,++,--,其中需要注意的是%,++,--;%取模运算也叫做取余,在Java中取余的规则:a%b=a-a/b*b++和--叫做自增运算即+1或-1++在前,先自加,后赋值++在后,先赋值,后自加(--运算与自增用法类似)2.算......
  • Java学习_第一个语法:添加注释
    单行注释://注释内容多行注释:/* 注释内容*/idea软件小技巧:多行注释往往容易找不到重点,可以在要做的事之前加上TODO前缀,idea软件会帮你高亮标注出来。 ......
  • Android面试涨薪攻略指南:Android面试必知必会Java知识点
    前言大多数面试者,虽然看起来工作努力,但他们表现出来的能力水平,却不足以通过面试,或拿到期望的薪资。在我看来,造成这种情况的原因,主要有这么两方面:第一,“知其然不知其所以然”。做了几年技术,开发了一些业务应用,但没有思考过这些技术选择背后的逻辑。所以,公司很难定位你日后的成长潜力......
  • 基于JAVA乳制品安全管理信息平台
    互联网的普及给人们带来的便利不需多说。因此如果把乳制品安全管理信息平台与互联网结合起来,利用java技术建设乳制品安全管理信息平台系统,实现乳制品安全管理信息平台的网络化。乳制品安全管理信息平台系统能够通过互联网得到广泛的、全面的宣传,让尽可能多的乳制品企业了解和熟知乳......
  • java WebUploader 分块上传
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式:post(get方式提交有大小限制,post没有)2.表单的enctype属性:必须设置为multipart/form-data.3.表单必须......
  • JavaScript中var、let、const的使用和区别
    var:var是声明变量的主要关键字,它的作用域是函数作用域函数作用域:意味着变量在函数内部声明是可见的,在函数外部声明是不可见的var声明的变量可以被重新声明和赋值,它可以在同一个作用于下多次声明同一个变量let:let的作用域是块作用域,块作用域可以是函数、条件判断等内部{......
  • 十年老司机帮你整理最全Android中需要知道的Java集合框架
    前言子曰:温故而知新,可以为师矣。做android已经有好一段时间了,今天突然看到代码中写的各种用来存储数据的ArrayList、管理Activity的LinkedList、用来Retrofit请求数据时多个参数拼接的HashMap。也许使用已经成为了一种习惯,可是使用他的理由又开始在脑海中慢慢淡化了,故写一篇文章来......
  • 基于JAVA驾驶员考试系统
    本论文主要阐述了基于Web技术的网络考试系统的设计与实现。在介绍动态网页程序开发和数据访问技术基础上,提出了网络英语考试系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,还重点剖析了前台考试部分的程序设计。系统采用B/S开发模式,以JAVA作为开......
  • Java—枚举Enum中使用反射转换属性值
    关注微信公众号:CodingTechWork,一起学习进步。需求  在开发过程中,有时候需要需要根据各个枚举类中一个字段属性值转为另一个字段属性值,如根据code转为name的需求进行前端展示。本文总结一下如何通过反射简单巧妙的进行枚举属性值的互相映射。实践枚举类packagecom.test.self......