java中hashcode的用法,hashcode()方法

  java中hashcode的用法,hashcode()方法

  00-1010 1.介绍hashCode方法2。为什么需要hashCode方法?3.hashCode()和equals()是什么关系?4.为什么在重写equals方法的时候一定要重写hashcode方法?

  

目录

hashCode()用于获取hash码,也称为hash码,实际返回的是一个int整数。哈希代码用于确定对象在哈希表中的索引位置。hashCode()是在JDK的Object.java中定义的,这意味着Java中的任何类都包含HashCode()函数。散列表存储的是键-值对,其特点是能够根据“键”快速检索对应的“值”。这就利用了哈希码!(可以快速找到自己需要的)。

 

  00-1010在编程的过程中,判断两个对象是否相同是一个很常见也是经常面临的问题。hashCode()方法用于加速两个对象的比较。

  让我们以“HashSet如何检查重复项”为例来说明为什么会有hashCode:

  当您将一个对象添加到HashSet中时,HashSet将首先计算该对象的hashcode值,以确定该对象被添加到哪里,并且还将它与其他已经添加的对象的hashcode值进行比较。如果没有匹配的hashcode,HashSet将假定对象不会重复出现。但是如果发现hashcode值相同的对象,就会调用equals()方法检查hashcode相同的对象是否真的相同。如果两者相同,HashSet不会让其join操作成功。如果不同,它将被散列到另一个位置。这样,我们就大大减少了等号的数量,相应地,执行速度也大大提高了。

  

1、介绍一下hashCode方法

Java指定eqauls()方法和hashCode()方法如下:

 

  hashCode()方法在同一个对象上被多次调用,并且总是返回同一个整数值。如果a .等于(b),则一定有a.hashCode()必须等于b.hashCode()。如果!a .等于(b),那么a.hashCode()不一定等于b.hashCode()。这时,如果a.hashCode()始终不等于b.hashCode(),那么hashtables的性能就会提高。A.hashCode()==b.hashCode()那么a.equals(b)是真还是假A.hashCode()!=b.hashCode()则a.equals(b)为假。上述结论总结如下:

  如果两个对象相等,Java运行时环境会认为它们的hashCode必须相等。如果两个对象不相等,有可能它们的hashCode相等。如果两个对象hashCode相等,它们不一定相等。如果两个对象hashCode不相等,它们一定不相等。

  

2、为什么需要hashCode方法?

我们上面解释过,如果两个对象相等,那么它们的hashCode值一定相等。如果只重写equals方法,而不重写hashCode方法,hashCode的值就会不同,equals方法判断的结果为真。在Java的一些容器中,不允许有两个相同的对象。插入时,如果判断相同,将被覆盖。此时,如果只重写equals的方法,而不重写hashCode的方法,Object中的hashCode就是根据对象的存储地址转换形成的哈希值。此时有可能是因为hashCode方法没有被重写,同一个对象被哈希到不同的位置,导致对象无法被覆盖的问题。例如

 

  狗类

  包com.xiao/* * * * @作者:小肖* @日期:创建于2022/3/11 14:42 */公类狗{私串名;私有整数年龄;public Dog(){ } public String getName(){ return name;} public void set name(String name){ this。name=名称;} public Integer getAge(){ return age;} public void setAge(整数年龄){这个。年龄=年龄;}公狗(字符串名,整数年龄){ this.name=namethis.age=年龄;} @覆盖public boolean等于(Object obj){ if(obj。getclass()!=getClass()){返回false } Dog Dog=(Dog)obj;如果(狗。getage()==年龄狗。getname().等于(姓名)){返回真实}返回false}}测试类

  导入com。萧。狗;public class Test { public static void main(String[]args){ Dog Dog=new Dog(小旺,2);狗狗1=新狗(小旺,2);System.out.println(等于结果:狗。等于(狗1));System.out.println(狗的散列码值是否等于dog1的散列码值:’(狗。hashcode()==dog 1。hashcode()));}}测试结果

  等于结果:truedog的散列码值是否等于dog1的散列码值:错误

  到此这篇关于爪哇超详细讲解散列码方法的文章就介绍到这了,更多相关Java hashCode内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: