Hashmap

hashmap在put键值对的时候比较键是否相等为什么hashcode和equals都要比一下?直接用equals不行吗?
为什么if里面要先比较e.hash == hash?直接用key.equals(k)为什么不行
for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } }
#面经##笔试题目#
全部评论
对于相同的key它们的hash值是相同的。但是hash值相同,它们的key却不一定是相同的。 为了执行效率: 这里先判断hash是否相同,hashcode都不同的话就没必要继续了,key肯定不同; hash相同的话,key却不一定相同,所以后面是在判断他们是否真的相同,而非哈希碰撞,碰撞会采用拉链法解决。
点赞 回复 分享
发布于 2019-07-07 12:51
hashcode用来定位到在数组的哪个位置,equals才是真正判断是否相同
点赞 回复 分享
发布于 2019-07-07 12:19
先比较hash值是为了提高比较的效率,比较hash值是比较的数值,相比于equals比较更快一些
点赞 回复 分享
发布于 2019-07-07 14:31
hashcode是第一步把关,用来提高效率的。
点赞 回复 分享
发布于 2019-07-07 13:38
同一个桶下面的链表节点或者树节点是hash值对数组长度取余结果相同,但不一定hash值相等,比如 3 % 5 == 8 % 5,结果都是3,但一个hash值是3一个是8,所以他们位于同一桶下但hash值不同,所以还需要再比较一下。
点赞 回复 分享
发布于 2019-07-07 13:10
这个问题问的好,那么请问和谁比???😂
点赞 回复 分享
发布于 2019-07-07 12:17
hashcode是比较看是不是在同一个bucket,equals是在在同一个的话又要看是不是链表上已经存在了
点赞 回复 分享
发布于 2019-07-07 12:14

相关推荐

01-04 13:04
已编辑
重庆大学 Java
算法:&nbsp;1.白板写一个hashmap数据结构,要求考虑哈希冲突,重点实现put和get方法2.lt4633.3个矩形能否构成一个正方形4.还有个简单sql面试:介绍两段实习1.&nbsp;最后都是提交到spark去执行的嘛?2.&nbsp;整个流程怎么执行的3.&nbsp;直接点击提交就可用了嘛??4.&nbsp;境内外代码合并讲一讲5.&nbsp;加索引的这个字段是啥,索引区分度是多少6.&nbsp;1500万数据,有没有其他的存储方案,考虑过嘛7.&nbsp;写入是怎么写入这张表的数据的呢?8.&nbsp;血缘关系讲一讲9.&nbsp;为什么用广度优先遍历?因为他是图的一个最基本的遍历算法吧10.&nbsp;时间复杂度11.&nbsp;3度关系为什么?12.&nbsp;这里的写入是怎么写入的?实时写入的13.&nbsp;有没有接触更细粒度的图数据库,例如存储引擎14.&nbsp;他查询返回的是啥?15.&nbsp;SQL可不可以看看?16.&nbsp;你业务层有什么难点嘛?17.&nbsp;如果查询的QPS突然暴增到10倍以上,那么你有什么好的思路来解决?18.&nbsp;redis的key怎么设计?redis中过期时间怎么设置19.&nbsp;查询出来的权限数据源会很大嘛?20.&nbsp;如何保证上线不会有问题,不出差错21.&nbsp;300ms是平均耗时嘛22.&nbsp;日志会打高点嘛????23.&nbsp;遇到过线上问题嘛?24.&nbsp;不要Java里面的hashMap,讲一下数据结构里面的hashmap25.&nbsp;装载因子?26.&nbsp;怎么进行扩容的?力竭了,面了1.5h,图书馆楼顶风又大,冷死了
点赞 评论 收藏
分享
01-14 15:20
门头沟学院 Java
为了入行xx岗,我学了_...
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务