黑马程序员—java中的hashCode与equals

OpenMMLab实战指南:从环境搭建到首个检测模型运行 本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。 阅读详情

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 HashCode

     在Object中已经定义了hashCode()方法,返回对象的哈希值,即对象的地址。

     在String,Integer,Boolean等基本类中,hashCode()方法被重写,因为,如果继续使用Object原有的方法,那么当我创建一个新的对象后,他的hash值必然是该对象在堆中的地址,是唯一的,例如:  

                                         String s1=new String("abc");

                                         String s2=new String("abc");

        虽然s1和s2的表示的都是字符串“abc”,但他们的hash值是不同的,因为他们在堆中都是独立存在的,都有自己的地址。不过,在String类中的hashcode()方法已经被重写了,他返回的是字符串中各字符的哈希值的总和。同样,在其他的基本类中,该方法都有已经被重写了。

         现在假如我们新建一个学生类,学生有姓名和学号两个属性,我们将学生对象存放到hashSet集合中,如果学生的姓名和学号一样,我们则认为两个学生是同一个人,不再重复放入。在实际中要达到该目的就必须重写学生类中的hashCode()方法,默认的方法是继承自Object类的,他返回的是对象在堆中的地址,那么每一个学生对象都有不同的hash值。             public int hashCode()
                    {
                   return name.hashCode()+id*29;
                    }

我们可以采用上述方法返回哈希值,只要将其与相应的元素关联起来即可。

equals

       该方法也是在Object类中就已经定义,同样是返回的对象的地址,该方法与hashCode()极为相似,我们来看看他们之间的区别。

        还是上面学生的例子,我们如果重写的hashCode()其实不是必须的,但是他可以极大的提高集合的查询速度,当你往集合中添加一个学生时,他会拿该学生对象的hash值去查集合的哈希表,如果发现了相同的哈希值,则不存,如果哈希值是唯一的,则继续调用equals方法来比较两个对象是否相同。因为equals方法要遍历整个集合,速度很慢,当集合中元素过多时,必须要重写hashCode()方法来把第一道关,是很有必要的。

       凡是涉及到两个对象的比较时,都会调用equals方法,如果你有自己的类,希望以自己的方式去比较其对象是否一样,那么就应该在类中重写equals方法,hashCode()用于Set集合中,哈希值得存在可以说主要是为了提高equals比较的速度,一旦哈希值相同,则立马丢弃,而不用遍历整个集合,当哈希值不同,方才调用equals方法。

     


这里需要注意的是,哈希值不同,那么对象不一定不同,哈希值相同,对象一定不同


当TreeSet调用add()方法添加元素时,会自动调用hashCode()和equals方法,这是集合的特点,由虚拟机自动完成


    

从 Product Master 视角理解 Configurable Products 摘要:SAP S/4HANA中的可配置产品(Configurable Products)通过集中管理产品变体解决主数据膨胀问题。以汽车和服务器为例,销售端显示为单一产品,生产端则处理多维度组合。核心机制包括:1)使用KMAT物料类型或Configurable标记;2)通过特征(characteristics)定义可选项;3)用分类(class)组织特征;4)配置档案(configuration profile)控制业务逻辑。这种设计将客户选择与主数据解耦,避免为每个组合创建独立物料,同时支持销售配置、生产B 阅读详情

相关推荐

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 627

黑马程序员——equals方法和hashCode方法的问题

---------------------- android培训、java培训、期待与您交流! ---------------------- 在没有看视频是之前自己是给hashCode和equals这两个方法搞的很晕,自己一直在想为什么重写hashCode的时候必须的重写equals方法,现在 看了视频终于真相大白了。 一般复写这两个方法的时候是在对象存进集合的时候。因为在存进集合的

beilaozai的专栏 858

Pandas实战指南:从数据结构到清洗聚合的完整解析

在数据分析工作中,表格数据处理是最常见的需求,无论是电商运营还是量化交易,都离不开对结构化数据的清洗与转换。Python生态中,Pandas凭借Series与DataFrame两种核心数据结构,将数据标签与数值绑定,实现自动对齐,极大简化了数据操作流程。它不仅是数据清洗的利器,也是分组聚合、透视表分析和时间序列处理的基础工具。掌握Pandas,意味着能够高效完成从数据读取、缺失值处理、类型转换到分组统计的完整分析流水线,将重复性报表工作自动化。本文基于实际使用经验,系统梳理Pandas的核心概念、常用操作、

weixin_30768881的博客 258

黑马程序员-hashSet的存储、检索与hashCode和equals的问题

public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketb

梁剑的专栏 748

红外:非均匀性校正01_基本原理与基本方法

非均匀校正(nonuniformity correction,NUC) 基本原理 这里要表达的意思就是:图中每一条直线对应一个像素点的,亮度/辐照度的情况。由于硬件的关系,每一个像素点的线性响应很不一样,所以需要通过矩阵来校正。 校正原理: 一点校正 两点校正 其他原理介绍: 参考链接: 基于多项式拟合的红外焦平面非均匀校正 课件:光电成像——非均匀性校正 红外图像非均匀性校正相关汇总 红外非均匀性校正算法总结 红外图像非均匀矫正——一点矫正 ...

dlvector的博客 2万+

Android:Google三方库之Adjust集成详细步骤

Android为APP添加google adjust功能

学习就是我的个性 4476

黑马程序员——HashCode与equals

------- android培训、java培训、期待与您交流! ----------                                        HashCode与equals方法详解 1.      首先equals()和hashcode()这两个方法都是从object类中继承过来的。  equals()方法在object类中定义如下:    public boo

HPerfectLife的专栏 568

关于esp32蓝牙模块的使用——esp32学习笔记

关于esp32蓝牙模块的使用——esp32学习笔记 零、前言 esp32自带蓝牙模块可以让我们进行蓝牙连接并进行数据交换 一、经典蓝牙BT 首先来编写代码,经典蓝牙的使用非常简单,首先声明使用了BluetoothSerial这个库,然后使用SerialBT.begin函数设置蓝牙的名字,再然后就是设置配对码,由于这里没有用到配对码,所以我将注释掉。当配对成功我们就使用printf函数打印出蓝牙配对成功。 #include <Arduino.h> #include <BluetoothSer

qq_53965184的博客 5万+

黑马程序员_HashCode与equals

-------------------------------------------------android培训、java培训期待与您交流!---------------------------------- 一、概述 1. 关于Object类的equals方法的特点 a) 自反性:x.equals(x)应该返回true b) 对称性:x.equals(y)为true,那么y.eq

诚惜的专栏 328

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 376

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 799

hashcode()和equals()的区别

hashCode()和equals()的区别 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。 本文介绍了2种方法在使用和重写时,一些需要注意的问题。 一、equal()方法 Object类中...

黑马程序员广州中心的专栏 144

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

黑马程序员-hashCode()的作用

——- android培训、java培训、期待与您交流! ———-问题:hashCode()在对象比较时很常用,那么它的作用究竟是什么? 1)利用哈希算法,提高了查找效率。 2)hashCode必须在哈希集合中才有用。 3)防止内存泄露。对象不用了,但是他没有被释放掉,一直占用内存。看下面实例1:定义已知类ReflectPointclass ReflectPoint { private

qq_30468305的博客 611

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

黑马程序员-hashcode与equals的作用

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------   1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 0 1 2 3 4 5 6 7 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找

remo866的专栏 525

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

黑马程序员--07.集合框架--02. 重写HashCode的内存变化过程以及两种重写hashCode方式的比较【个人总结】

重写HashCode       重写HashCode的内存变化过程 两种重写方式的比较 ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ (1). 主要代码 class Person{ private String name; private int age; public stat

歆明正航的专栏 3313

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

黑马程序员_集合HashSet和hashCode算法

一、hashCode算法        hashCode算法由来        果想查找一个集合中是否包含有某个对象,大概的程序代码怎样写呢?当发现某个元素与要查找的对对象进行equals方法比较的结果相等时,则停止继续查找并返回肯定的信息,否则返回否定的信息。如果是一个集合中有很多元素,譬如有一万个元素,并且没有包含要查找的对象时,则意味着你的程序需要从该集合中取出一万个元素进行啄一的比较才

u013320972的专栏 893

黑马程序员 Java Object类与包

Object类 Object:所有类的根类。 Object是不断抽取而来,具备着所有对象都具备的共性内容。 常用的共性内容 equals方法: 指示其它某个对象是否与此对象“相等”。 equals和==的区别: 经常被简单的理解为equals方法用来比较两个对象是否相同, 而==比较运算符用来比较两个基本数据类型的数值是否相同。 这样的理解无可厚非,但还要透过简单看看本质,才

h 819

黑马程序员——Set集合+hashCode+比较器

——- android培训、java培训、期待与您交流! ———-1.Set集合 Se接口方法和父接口Collection一样 * Set接口派系特点 不允许存储重复元素 无序集合,不保证迭代顺序 没有索引Set集合迭代方式,迭代器,增强for /* Set集合存储字符串并迭代 使用Set接口实现类 HashSet进行演示 接口和实现类多态调用,带泛型

qqyy789456的博客 603

黑马程序员_java中的hashcode和equls总结

---------android培训、java培训、期待与您交流! --------- equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 而hashCode()是对象或变量通过哈希算法计算出的哈希值。 之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCo

jkl123357741的专栏 587

[黑马程序员]集合_ArrayList练习时为何要重写equals方法

一直对Java中的==和equals用法不太明白,这里简单搞一下。 简单来讲: 基本数据类型比较:  ==,比较的是值。 对象分两种: ==,比较对象的地址 equals,不同的类对比的内容不同。 eg. Object的qeuals:说白了,就是对比的地址。当爹的最简单,留下事情让后辈去搞。。。 public boolean equals(Object obj)

tomlucky001的专栏 1453

黑马程序员_ArrayList_HashSet及Hashcode的分析

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

LoveMyAbel的专栏 490

黑马程序员_对象的比较

-------android培训、java培训、期待与您交流! ---------- Equals方法: Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中这个方法判断两个对象是否有相同的引用。如果两个对象有相同的引用,它们一定是想等的。 然而,对于多数类来说,这种判断并没有什么意义。例如,采用这种方式比较两个PrintStream对象是否相等就完全没

u013963996的专栏 533

黑马程序员-Java之HashSet

--------------android培训、java培训、期待与您交流!--------------------- 特性:元素存放无序,且元素值唯一 原理:由于底层元素存放结构是哈希表结构,所以是无序的,当新的元素存放的时候,会调用该元素的hashCode()计算出一个哈希值,然后去和集合中的原有元素的哈希值比较,如果相同,则调用元素的equals()进行内容的比较,内容不同则会在

forTomorrow_java的博客 435

黑马程序员_Object类

------- android培训、java培训、期待与您交流! ---------- java类默认继承属于Object类,用一句话形容就是:"啥都是东西"。Java类继承了Object的所有属性和方法,如:toString(),hashCode(),equals() 1) toString()方法 · 经常由系统默认调用,是活动当前对象的文本描述 · Object默认返回值:全限定名@

javabean8的专栏 485

黑马程序员-Java基础:常用API

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! —-API中常用类总结一、Object类 Object类可以说是所有类的”上帝”,所谓上帝的含义就是造万物,Java中所有的类都直接或间接继承自Object类,那么了解Object类中的方法有助于理解Java中所有类的共性。重点方法介绍: <1>.boolean equals(Object obj) Java中所有

BlackHorseKevin的博客 1309
上一篇: 黑马程序员—Java中File类学习笔记(一)
下一篇: 黑马程序员—关于Java中的内部类的笔记
Jacky_Pen
博客等级 码龄15年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值