Java-hashCode()

哈希码相同并不意味着对象相等,当equals不同时,会发生hash冲突。HashMap使用hash表存储,相同hashcode的对象会被放入同一个桶内,桶内可能形成链表或红黑树。当链表长度超过8时,会转换为红黑树,以优化查找效率。理解这一概念对于优化数据结构和算法至关重要。
摘要由CSDN通过智能技术生成

Java-hashCode()

hashcode相同时,而equals()方法不相同,叫做hash冲突。

  • 官方想给每个对象一个唯一标识,即hashcode但目前任何hash算法都无法满足,数据量大时都会产生冲突。
  • 当两个对象的equals相同的时候,如果是字符串,那不用说都是从字符串常量池里面取得,也就是说同一个,这个时候他们的值是相同的,hashcode也是相同的,当我们自定义类对象时,也是一样的,因为重写了equals方法,所以判断他们的内容也就是每一个属性,也是一样的,两个对象相同的时候他们都是从常量池里取得同一份数据,所以相同。
  • hashmap底层用hash表进行存储,即一个数组加若干链表,在调用put方法存数据的时候,hashmap会先计算它的键值的hashcode,然后根据hashcode计算出他在桶内的角标,这个桶值得就是数组的每个槽位,当遇到hashcode值相同的对象时候也就是产生hash冲突的时候,就放在同一个槽位里面形成链表,当链表的长度超过8时的时候就会转化为树,形成红黑树。也就是在这个链表或者是树上的数据他们的hashcode是相同的,但他们的值不一定是相同的,

比如:

 

 ·此时,这两个值得hashcode就是相同的,所以肯定是基于同一个槽位的,放在一个链表上。这就是当hashcode相同的时候,用equals判断对象,不一定相同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值