当前位置: 首页 > news >正文

【数据结构】对象的比较

Java数据类型分为基本数据类型和引用类型,基本数据类型可以直接比较大小,对于引用类型的变量不能直接比较。下面来讲解Java对象的比较。

目录

equals比较

 Comparble接口类的比较

基于比较器比较


equals比较

 equals是Object类中的方法,只能判断引用类型。默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。 

public class Student {public int age;public String name;public Student(int age, String name) {this.age = age;this.name = name;}@Overridepublic boolean equals(Object obj) {
//将自己与自己比较,地址相同内容一定相同if(this==obj)return true;
//判断是否为Student类if(obj instanceof Student) {
//向下转型Student s = (Student) obj;return s.age==this.age&&this.name.equals(s.name);}else
//不是Student类,返回falsereturn false;}
}
public class Test {public static void main(String[] args) {Student student1=new Student(18,"xiaohei");Student student2=new Student(18,"xpaohei");System.out.println(student1.equals(student2));}
}
1. 如果指向同一个对象,返回 true
2. 如果传入的对象类型不是  Student ,返回 false
3. 按照类的实现目标完成比较,例如这里只要年龄和名字一样,学生信息就相同
4. 注意下调用其他引用类型的比较也需要 equals ,例如这里的 name  的比较

equals与==区分点

==是一个比较运算符

  • 既可以判断基本类型,又可以判断引用类型
  • 如果判断类型为基本类型,判断的值是否相等
  • 如果判断的是引用类型,判断的是地址是否相等,即是不是同一个对象

 Comparble接口类的比较

实现Comparble接口可用于比较用户自定义类型,并重写compareTo方法

public class Student implements Comparable {public int age;public String name;public Student(int age, String name) {this.age = age;this.name = name;}@Overridepublic int compareTo(Object o) {Student s = (Student) o;return this.age - s.age;}}

基于比较器比较

按照比较器方式进行比较,具体步骤如下:
  • 用户自定义比较器类,实现Comparator接口

public class StudentCompare implements Comparator<Student> {

    }

注意:区分ComparableComparator 

  •  覆写Comparator中的compare方法
public class StudentCompare implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {return o1.name.compareTo(o2.name);}
}

总体代码:

public class Student {public int age;public String name;public Student(int age, String name) {this.age = age;this.name = name;}}public class StudentCompare implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {return o1.name.compareTo(o2.name);}
}public class Test {public static void main(String[] args) {Student student1=new Student(18,"aiaohei");Student student2=new Student(19,"aiaohei");StudentCompare s=new StudentCompare();System.out.println(s.compare(student1, student2));}
}

Comparable.compareTo与Comparator.compare区分

  • Comparable.compareTo 需要手动实现接口,侵入性比较强,但一旦实现,每次用该类都有顺序,属于内部顺序
  • Comparator.compare 需要实现一个比较器对象,对待比较类的侵入性弱,但对算法代码实现侵入性强

相关文章:

【数据结构】对象的比较

Java数据类型分为基本数据类型和引用类型&#xff0c;基本数据类型可以直接比较大小&#xff0c;对于引用类型的变量不能直接比较。下面来讲解Java对象的比较。 目录 equals比较 Comparble接口类的比较 基于比较器比较 equals比较 equals是Object类中的方法&#xff0c;只能…...

代码随想录八股训练营第四十天| C++

目录 一、什么是菱形继承&#xff1f; 1.1.菱形继承的示例: 1.2.菱形继承的问题&#xff1a; 1.3.解决菱形继承问题&#xff1a; 二、C中的多线程同步机制&#xff1f; 2.1.互斥锁&#xff08;Mutex&#xff09;: 2.2.递归互斥锁&#xff08;Recursive Mutex&#xff09…...

【C++】10道经典面试题带你玩转二叉树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…...

【裸机装机系列】13.kali(ubuntu)-优化-自定义grub启动界面个性化背景

推荐阅读&#xff1a; 1.kali(ubuntu)-为什么弃用ubuntu&#xff0c;而选择基于debian的kali操作系统 当裸机安装了linux之后&#xff0c;开机的时候总会让人误会是黑客&#xff0c;还是优化一下开机界面吧&#xff0c;毕竟是日常开发使用。 注&#xff1a;修改有grub启动项有…...

数组高阶应用(C++版)

在C中&#xff0c;普通的数组&#xff08;C-style array&#xff09;、std::initializer_list 、 std::array和std::vector 是四种不同的容器类型&#xff0c;它们各自有不同的特性和用途。下面是对它们进行详细比较和解释。 1. 普通数组&#xff08;C-style Array&#xff09…...

Spring(四)多线程+异步任务执行服务+常见的Enable注解+SpringUnit测试

Spring多线程 Spring通过任务执行器&#xff08;TaskExecutor&#xff09;来实现多线程和并发编程ThreadPoolTaskExecutor实现一个基于线程池的TaskExecutor配置类中EnableAsync开启对异步任务的支持使用Async声明该任务为异步 ①、配置类 Configuration ComponentScan(&quo…...

解析与实现二叉树

在数据结构与算法的学习中&#xff0c;二叉树无疑是一个重要且实用的数据结构。它不仅在理论上具有深刻的研究价值&#xff0c;更在实际应用中广泛存在&#xff0c;如搜索引擎的索引结构、文件系统的目录树、数据库的索引、游戏开发中的场景管理等等。本文将深入探讨二叉树的基…...

Java面向对象——内部类(成员内部类、静态内部类、局部内部类、匿名内部类,完整详解附有代码+案例)

文章目录 内部类17.1概述17.2成员内部类17.2.1 获取成员内部类对象17.2.2 成员内部类内存图 17.3静态内部类17.4局部内部类17.5匿名内部类17.5.1概述 内部类 17.1概述 写在一个类里面的类叫内部类,即 在一个类的里面再定义一个类。 如&#xff0c;A类的里面的定义B类&#x…...

操作系统笔记三

进程 把一个静态程序通过OS在内存中让cpu执行起来的动态执行过程叫进程 写代码都是用户态&#xff0c;而进程在执行过程中需要完成特定的功能&#xff0c;这些功能呢只有操作系统能提供&#xff0c;比如说读写文件&#xff0c;读写文件的过程是与硬盘打交道&#xff0c;这个过程…...

uniapp快速入门教程,内容来源于官方文档,仅仅记录快速入门需要了解到的知识点

uniapp快速入门教程&#xff0c;内容来源于官方文档&#xff0c;仅仅记录快速入门需要了解到的知识点 目录 介绍uniapp 介绍uniapp x 介绍功能框架图创建项目&发布组件/标签的变化js的变化css的变化工程结构和页面管理 pages.jsonmanifest.json 应用配置组件easycom组件规…...

基于微信小程序的商品展示+ssm(lw+演示+源码+运行)

商品展示系统 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;微信小程序被用户普遍使用&#xff0c;为方…...

【Linux】常用指令(下)(内含more、less、 head、tail、date、find、grep、zip、tar以及学习笔记)

文章目录 前言1. more指令2. less指令&#xff08;重要&#xff09;3. head指令4. tail指令5. 管道&#xff08;做到学会使用即可&#xff09;6. date指令6.1 时间戳 7. cal指令8. find指令9. grep指令10. zip/unzip指令11. tar指令 前言 Linux下的常用指令终于要在本文落下帷…...

DesignMode__unity__抽象工厂模式在unity中的应用、用单例模式进行资源加载

目录 抽象工厂模式 思维导图 接口&#xff08;抽象类&#xff09; 工厂接口 抽象产品类 抽象武器接口 抽象人物接口 具体工厂和具体产品 具体工厂 &#xff08;1&#xff09;产品接口&#xff0c;生成具体人物 &#xff08;2&#xff09;武器接口&#xff0c;生成具体…...

Leetcode3289. 数字小镇中的捣蛋鬼

Every day a Leetcode 题目来源&#xff1a;3289. 数字小镇中的捣蛋鬼 解法1&#xff1a;哈希 代码&#xff1a; /** lc appleetcode.cn id3289 langcpp** [3289] 数字小镇中的捣蛋鬼*/// lc codestart class Solution { public:vector<int> getSneakyNumbers(vector…...

13_Python的高阶函数

高阶函数 高阶函数是Python编程中一个非常强大和有用的特性&#xff0c;它们允许程序员编写更简洁、更抽象的代码。 Python中的高阶函数是那些至少满足以下一个条件的函数&#xff1a; 接受一个或多个函数作为输入&#xff08;也就是说&#xff0c;它的参数之一是函数&#…...

清空当前机器所有Docker容器和镜像

sudo docker stop $(sudo docker ps -aq) sudo docker rm $(sudo docker ps -aq) sudo docker rmi $(sudo docker images -q)删除当前机器上的所有Docker镜像是一个高风险操作&#xff0c;因为它会删除所有镜像&#xff0c;包括那些可能正在被容器使用的镜像。在执行此操作之前…...

FreeRTOS学习——Systick中断、SVC中断、PendSV中断

FreeRTOS学习——接口宏portmacro.h&#xff0c;仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 port &#xff1a;GCC/ARM_CM7 文章目录 Systick源码触发方式 SVC源码触发方式 PendSV源码触发方式 相关汇编指令 Systick 源码 在Systick中断xPortSysTickHandler中&am…...

汇量科技大数据面试题及参考答案

如何在 SQL 中处理三个字段完全一样的去重?在 Scala 中又该如何实现? 在 SQL 中,可以使用多种方法来处理三个字段完全一样的去重。一种常见的方法是使用 DISTINCT 关键字结合多个字段来实现。例如,假设有表 table_name,包含字段 field1、field2 和 field3,可以使用以下 S…...

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.AVL树

1.AVL 树 1.1AVL 树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962…...

Python 的数据类型与操作

一、常用内置类型&#xff08;Built - in Types&#xff09; Python 拥有多种内置数据类型&#xff0c;这些类型满足了各种编程需求&#xff0c;从简单的数据存储到复杂的数据结构表示。 1. 数值类型&#xff08;Numeric Types&#xff09; 整数&#xff08;int&#xff09;&a…...

书评质量断崖式提升的关键一步,Perplexity辅助写作的3层认知跃迁与2个致命误用陷阱

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;书评质量断崖式提升的关键一步&#xff0c;Perplexity辅助写作的3层认知跃迁与2个致命误用陷阱 Perplexity 不是搜索引擎的替代品&#xff0c;而是面向深度思考的“认知协作者”。当用于技术书评写作时&#x…...

《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点

简介&#xff1a; 上一小节我们用功能包组织了python节点&#xff0c;这节我们把C节点也装进功能包。 参考资料&#xff1a; 参考资料均来自于鱼香ROS社区创始人小鱼&#xff0c;资源如下&#xff1a; ①&#xff1a;【《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织…...

导师认可的AI论文软件榜单(2026 最新实测)

基于学术严谨性、写作效率、功能全面性及用户反馈&#xff0c;以下是2026年最新实测中表现突出的AI论文写作工具权威榜单&#xff0c;按综合使用价值从高到低排列&#xff0c;并附上各工具的核心优势与适用人群。&#x1f3c6; 第一梯队&#xff1a;全流程学术解决方案&#xf…...

在Taotoken平台观测不同模型API调用的延迟与用量数据实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Taotoken平台观测不同模型API调用的延迟与用量数据实践 当你在一个项目中集成了多个大模型&#xff0c;并希望通过Taotoken的统一…...

当A*算法遇上真实山地DEM:一份给无人机/机器人路径规划者的Python避坑指南

当A*算法遇上真实山地DEM&#xff1a;无人机路径规划的Python实战与优化 山地路径规划的独特挑战 在无人机和机器人导航领域&#xff0c;山地地形带来了传统路径规划算法难以应对的复杂性。与平坦城市环境不同&#xff0c;山地DEM&#xff08;数字高程模型&#xff09;数据包含…...

从MATLAB函数到Python字典:一个脚本搞定MATPOWER数据格式转换与可视化

从MATLAB函数到Python字典&#xff1a;电力系统数据跨平台处理实战 电力系统分析领域长期依赖MATLAB生态&#xff0c;而MATPOWER作为经典工具包更是以.m函数文件作为标准数据载体。但当我们需要结合Python强大的数据处理和可视化能力时&#xff0c;这种数据格式就成为了技术栈融…...

5分钟快速上手SignTools:自托管iOS应用签名平台完整教程

5分钟快速上手SignTools&#xff1a;自托管iOS应用签名平台完整教程 【免费下载链接】SignTools ✒ A free, self-hosted platform to sideload iOS apps without a computer 项目地址: https://gitcode.com/gh_mirrors/si/SignTools 想要在iOS设备上自由安装第三方应用…...

多模态大模型微调为什么一上图文交错数据就开始视觉退化:从 Modality Collapse 到 Progressive Unfreeze 的工程实战

一、视觉退化并非个例 在多模态大模型&#xff08;VLM&#xff09;指令微调阶段&#xff0c;一个反复出现的现象是&#xff1a;模型经数万条图文交错样本训练后&#xff0c;面对纯视觉任务准确率反而下降&#xff0c;生成描述越来越偏向文本先验&#xff0c;甚至出现"看图…...

3分钟掌握:Windows电脑上安装安卓应用的终极解决方案

3分钟掌握&#xff1a;Windows电脑上安装安卓应用的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接安装和运行安卓应用吗&#xff…...

端侧AI算力瓶颈与优化企业格局解析

一、引言&#xff1a;端侧AI的发展困境与研究核心1.1 端侧AI的产业价值与普及现状端侧AI作为边缘计算的核心落地形态&#xff0c;正深度渗透工业制造、智能终端、车载电子、安防监控等领域。据IDC数据&#xff0c;2025年全球端侧AI芯片市场规模突破180亿美元&#xff0c;工业端…...