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

自学 ABAP 和自学 SAP 的差别 有朋友在我的 ABAP 学习教程里留言: > 自学SAP是不是都要搭建虚拟服务器,然后自己去官网下载新版本SAP就可以吗 对于初学者,我们要搞清楚 ABAP 和 SAP 的区别。 ABAP 是一门编程语言,SAP 首先是德国软件公司的名称,也代表这家公司开发的一系列软件。SAP 公司开发的软件,我们有时也称产品,其功能能满足客户一个或者多个领域的业务需求。这些不同领域,我们也称为不同的业务模块,比如 ERP,CRM,SRM,HR 等等。 阅读详情

 ------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方法,这是集合的特点,由虚拟机自动完成


    

基于Matlab的无迹卡尔曼滤波惯性导航与DVL组合导航 航天航空领域中的惯性导航是一种基于惯性测量单元(Inertial Measurement Unit,IMU)的导航方法,可以提供航向、速度和位置等信息。深度/速度测量器(Doppler Velocity Log,DVL)是一种常用的传感器,可用于测量水下航行器的速度。通过将DVL与无迹卡尔曼滤波相结合,可以实现高精度的组合导航。本文介绍了基于Matlab的无迹卡尔曼滤波(UKF)惯性导航与DVL组合导航的方法。以上是一种简化的示例代码,您可以根据实际应用需求进行相应的修改和优化。 阅读详情

相关推荐

基于gm/id方法的折叠式共源共栅放大器设计实践

本文详细介绍了基于gm/id设计方法进行折叠式共源共栅放大器设计的完整流程。该方法通过确定晶体管的跨导效率(gm/id)作为核心设计参数,将复杂的放大器设计转化为有明确路径的优化问题。文章以设计一个增益80dB、带宽1GHz的两级放大器为例,逐步拆解了从指标分解、关键晶体管工作点选取、到实战仿真与微调的全过程,特别强调了第二级设计对稳定性的影响以及相位裕度的调试技巧。

w8x9y0z1的博客 415

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

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

beilaozai的专栏 858

运算放大器电路中的T型网络:如何用更小电阻实现高增益并降低噪声?

本文深入解析了运算放大器电路中T型反馈网络的设计与应用。该网络通过三个较小阻值电阻的组合,等效实现高增益,有效规避了传统大反馈电阻带来的显著热噪声问题。文章从数学原理、噪声定量分析到实际设计技巧,系统阐述了如何利用T型网络在实现高增益的同时,显著降低电路噪声并改善整体性能。

banana的博客 319

黑马程序员-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

从零开始:使用CMake构建GreenHills RH850项目的完整工作流(2018.1.5版)

本文详细介绍了如何从零开始使用CMake构建GreenHills RH850嵌入式项目的完整工作流。通过编写工具链文件、定义CMakeLists.txt,实现自动化、可维护的跨平台构建,有效解决了传统IDE在多模块、持续集成场景下的局限性,显著提升团队协作效率和项目可维护性。

weixin_28839699的博客 130

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 360

黑马程序员——HashCode与equals

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

HPerfectLife的专栏 568

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

黑马程序员_HashCode与equals

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

诚惜的专栏 328

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

【论文硬核拆解】Ctx2Skill:让大模型自己跟自己玩,从上下文里「进化」出可复用技能

论文选择自然语言技能可解释性:技能是人类可读的 Markdown 文件,可以审查、编辑、调试可迁移性:即插即用,从一个模型到另一个模型无需参数访问:对闭源模型友好这比 SKILL0/SkillRL 等参数内化方法更实用,尤其是在商业 API 场景。

步子哥的博客 155

hashcode()和equals()的区别

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

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

qq_30468305的博客 611

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

remo866的专栏 525

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

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

歆明正航的专栏 3313

黑马程序员_集合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 黑马程序员学习笔记(进阶篇4)

若直接调用 divide(BigDecimal val),当结果无法整除时(如 1÷3),会抛出 ArithmeticException,必须显式指定 scale(保留小数位数)和 roundingMode(舍入模式)。BigDecimal 位于 java.math 包下,是专门处理高精度小数的类,解决 float/double 因二进制存储导致的 “精度丢失” 问题(如 0.1 + 0.2 ≠ 0.3)。但对于引用类型成员(如数组、对象),只会复制引用(即新对象和原对象的引用类型成员指向同一块内存)。

2302_79807388的博客 1116

黑马程序员_JAVA多态

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 主要内容:一、多态;二、多态中成员的特点;三、多态的主板示例;四、Object类 一、多态 1、多态的概念:可以理解为事物存在的多种体现形态。父类引用指向子类对象。 例...

chengweijun8866的博客 220
上一篇: 黑马程序员—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、付费专栏及课程。

余额充值