Compareable接口的compareTo方法详解

2023-11-08

Compareable接口可以实现类中成员属性的排序方法。通过重写Compareable接口中的CompareTo方法实现自定义规则的排序。

针对Compareable接口的排序方式,将通过对学生类和测试类进行一个代码演示

一般情况下

一般情况下Compareable接口是实现自然排序,即依照对象的添加顺序进行排序。如果CompareTo方法中返回的是正整数那么将依照添加顺序正序排序,如果是负整数依照添加顺序逆序排序

//student类
public class d_stu implements Comparable<d_stu>{
    //通过对Comparable接口的实现 重写CompareTo方法实现排序规则的自定义
    @Override
    public int compareTo(d_stu o) {
        return -1;//这里直接要求返回-1 所以将按照添加顺序逆序排序
    }
​
    public  String name;
    public int age;
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    @Override
    public String toString() {
        return "d_stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
​
import java.util.Iterator;
import java.util.TreeSet;
​
public class demo1 {
    public static void main(String[] args) {
        d_stu d1= new d_stu();
        d_stu d2=new d_stu();
        d_stu d3=new d_stu();
        d_stu d4=new d_stu();
        d_stu d5=new d_stu();
        d1.setName("张三");
        d1.setAge(15);
        d2.setName("李四");
        d2.setAge(14);
        d3.setName("王五");
        d3.setAge(19);
        d4.setName("马六");
        d5.setAge(18);
        d5.setName("jakc");
        d4.setAge(16);
//创建TreeSet集合 将元素添加进去
        TreeSet<d_stu>ts=new TreeSet<>();
        ts.add(d1);
        ts.add(d2);
        ts.add(d3);
        ts.add(d5);
        ts.add(d4);
​
        Iterator<d_stu>it=ts.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}
​

最终程序的运行结果如下,

 

也就是说在直接返回指定数字的情况下。
**如果是负整数的话CompareTo方法将依照元素的添加顺序在输出的时候逆序输出。**
​
**那么是正整数的话就将按照元素的添加顺序在输出的时候正序输出。**
​
**是零的话就另外考虑**

重写方法后

重写方法后也分如下几种情况

成员变量-局部变量

将依据参照变量进行升序排序

//student类
public class d_stu implements Comparable<d_stu>{
    //重写compareTo方法 这里使用成员变量减去局部变量的方式
    @Override
    public int compareTo(d_stu o) {
        return this.getAge()-o.getAge();
        //这里使用age作为参照变量
    }
​
    public  String name;
    public int age;
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    @Override
    public String toString() {
        return "d_stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
​
//测试类
import java.util.Iterator;
import java.util.TreeSet;
​
public class demo1 {
    public static void main(String[] args) {
        d_stu d1= new d_stu();
        d_stu d2=new d_stu();
        d_stu d3=new d_stu();
        d_stu d4=new d_stu();
        d_stu d5=new d_stu();
        d1.setName("张三");
        d1.setAge(15);
        d2.setName("李四");
        d2.setAge(14);
        d3.setName("王五");
        d3.setAge(19);
        d4.setName("马六");
        d4.setAge(16);
        d5.setName("jakc");
        d5.setAge(18);
​
        TreeSet<d_stu>ts=new TreeSet<>();
        ts.add(d1);
        ts.add(d2);
        ts.add(d3);
        ts.add(d4);
        ts.add(d5);
​
        Iterator<d_stu>it=ts.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}
​

程序最终运行效果图

 

局部变量-成员变量

将依据参照变量进行降序排序

//student类
public class d_stu implements Comparable<d_stu>{
    //这里重写compareTo方法 采取局部变量减成员变量的方法
    //参照变量为age
    @Override
    public int compareTo(d_stu o) {
        return o.getAge()-this.getAge();
    }
​
    public  String name;
    public int age;
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    @Override
    public String toString() {
        return "d_stu{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
​
//测试类
import java.util.Iterator;
import java.util.TreeSet;
​
public class demo1 {
    public static void main(String[] args) {
        d_stu d1= new d_stu();
        d_stu d2=new d_stu();
        d_stu d3=new d_stu();
        d_stu d4=new d_stu();
        d_stu d5=new d_stu();
        d1.setName("张三");
        d1.setAge(15);
        d2.setName("李四");
        d2.setAge(14);
        d3.setName("王五");
        d3.setAge(19);
        d4.setName("马六");
        d4.setAge(16);
        d5.setName("jakc");
        d5.setAge(18);
​
        TreeSet<d_stu>ts=new TreeSet<>();
        ts.add(d1);
        ts.add(d2);
        ts.add(d3);
        ts.add(d4);
        ts.add(d5);
​
        Iterator<d_stu>it=ts.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}

程序最终运行效果

 

小结:

针对自定义类对Compareable接口的实现。采取重写compareTo方法的方式可以自定义排序规则。

如果直接在comparaTo方法中返回数值的话。那么排序规则就将判断这个数是正整数还是负整数或者是零来进行排序。如果是正整数就将依照元素的添加顺序采取顺排序。如果是负整数就将依照元素的添加顺序采取倒序排序

如果在重写compareTo方法中采取成员变量减局部变量的方式。那么就将依照表达式中的参照变量进行升序排序

如果在重写compareTo方法中采取局部变量减成员变量的方式。那么将依照表达式中的参照变量进行降序排序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Compareable接口的compareTo方法详解 的相关文章

随机推荐

  • win下使用git-bash工具进行ssh免密登录服务器

    1 ssh keygen exe 生成公钥私钥 pub 2 ssh agent exe bash 指定工具 3 ssh add exe 添加私钥 OK
  • nacos注册中心的配置

    将nacos作为注册中心使用 使用的步骤 导入nacos依赖 这么导
  • 选路算法(计算机网络)

    目的 决定从源到目的地通过网络的 好的路径 一般指最小费用的路径 根据算法是静态的还是动态的进行分类 静态 路由随时间缓慢变化 手工配置 动态 路由更快地变化 周期的更新 适应链路费用和网络拓扑变化 根据算法是全局式的还是分散式的来加以区分
  • Python入门指南:从零开始学习Python编程

    文章目录 前言 安装Python 变量以及数据类型 总结 前言 Python是一种简单而又强大的编程语言 它在全球范围内广受欢迎 适用于各种应用场景 包括Web开发 数据分析 人工智能和科学计算等 本篇博客将为初学者提供一份Python入门
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • 背景图片设置透明度

    div position relative background color eee background moz linear gradient 30deg eff8fd 0 f0f9fe 40 c4e2fe 80 9cbee6 100
  • 计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

    Date 2020 05 19 Author CW 前言 EAST 的损失函数由三部分构成 对应预测输出的三个map score map loc map 以及 angle map 即分类损失 位置 点到文本框边界上下左右的距离 损失以及角度
  • stm32—通用定时器实验设计

    stm32定时器编写 stm32定时器编写 1 打开项目 2 在timer h中完成定时器中断实现步骤 a 使能定时器函数 b 初始化定时器 备注 c 开启定时器中断 配置NVIC d 使能定时器 3 写入中断服务函数 中断函数完成后 开始
  • 使用react脚手架快速搭建项目以及项目文件的介绍(目录文件的功能及作用)

    前言 本篇文章教大家使用脚手架搭建react的项目 对于新建的react项目 项目目录里的文件都是干什么的 有什么作用呢 下面一起来看看 react脚手架 使用yarn在本地安装create react app npm i g yarn 全
  • Easylogging++之配置功能

    要完成Easylogging 日志的配置功能 可以通过三种方式实现 而且每一种方法都非常简单 使用配置文件 这种方法的好处就是只要修改配置文件即可实现日志格式的重新配置 而不需要修改源程序代码 缺点就是发布程序时必须打包配置文件一起发布 否
  • 常见架构模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 计算机操作系统 (王道考研)笔记(一)

    重点知识点 1 并发 并行 2 电脑开机过程 3 程序 进程 4 进程 4 1 进程的组成与控制 进程的状态与转换 4 1 1 进程的组成 4 1 2 进程控制 4 1 3 进程的状态与转换 4 1 4 程序的切换 4 2 进程通信 4 2
  • 由计数排序衍生出来的桶排序

    计数排序说白了 就是拿一个列表来记录list里的数对应count的下标出现的次数 最后利用count的统计打印出来即可 下面来看看桶排序 针对较多的数据排序 将数据分为n个桶 列表遍历 冒泡排序逆用 确保每个桶里有序 直到最后将内个桶的数据
  • mysql查询时取多条记录中最大时间的记录

    在查询的过程中 有时库里单个用户的数据往往会存在很多条 当我们需要查询出用户的一条数据时 最大时间对应记录或最小时间对应记录 往往要写很复杂的子查询 而其实通过一个简单的方法就可以查询 就是使用concat函数 就可以非常简单的查询出相应的
  • 小技巧(8):Word中自定义目录,并设置自动目录的格式

    文章目录 一 对正文中的目录设置大纲级别 1 1 通过样式设置标题级别 1 2 通过段落设置标题级别 二 设定自定义目录格式 2 1 生成自定义目录 2 2 设置显示大纲级别 2 3 设置不同级别目录的显示格式 一 对正文中的目录设置大纲级
  • vsftpd的安装和使用

    目录 1 vsftpd的简介 2 2 特点 2 3 安装 2 4 创建虚拟用户 2 5 vsftpd服务器的配置 4 6 vsftpd配置文件说明 7 7 防火墙的配置 8 8 vsftpd的验证 9 9 vsftpd的常用命令 10 10
  • sql 递归查询_SQL如何求解递归问题?

    点击上方SQL数据库开发 关注获取SQL视频教程 SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总 递归 递归是指程序调用自身的一种编程技巧 在SQL中也有递归查询 下面我们通过一个省市区的示例来讲解递归查询的用法 问题 有如下一
  • 【C语言刷题2】

    1 杨辉三角 思路 首先观察一下示例 会发现需要一个二维数组来帮助解题 根据题目描述 会发现每一行的元素个数等于行数 并且每行首尾元素都是1 中间的元素都是左上角和上方元素和 这样我们就可以建立一个选择语句if else 如果是每行第一个或
  • UE4 C++ Timeline

    UE4 C Timeline 我命名有点不规范注意点看 结束事件绑定 每次更改绑定 调用时间轴开始方法方法 1 先建C 类 用碰撞触发时间轴 代码 h Fill out your copyright notice in the Descri
  • Compareable接口的compareTo方法详解

    Compareable接口可以实现类中成员属性的排序方法 通过重写Compareable接口中的CompareTo方法实现自定义规则的排序 针对Compareable接口的排序方式 将通过对学生类和测试类进行一个代码演示 一般情况下 一般情