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

相关推荐

09-25 23:46
已编辑
门头沟学院 golang
一面:&nbsp;全程1h多几分钟1.&nbsp;自我介绍2.&nbsp;你的项目是实际运行的还是练手项目?3.&nbsp;从你简历上的实习经历和项目经历挑一个来聊聊4.&nbsp;在实习期间,核心负责的内容是什么?5.&nbsp;你认为你遇到的主要的技术难点是什么?6.&nbsp;拷打实习7.&nbsp;Kafka&nbsp;的整体架构是怎样的?它有哪些核心组件,分别起什么作用?8.&nbsp;Broker&nbsp;和&nbsp;Partition&nbsp;具体是什么,作用是什么?9.&nbsp;Kafka&nbsp;是如何通过副本机制保证其可靠性的?10.&nbsp;你使用&nbsp;Kafka&nbsp;是怎么保证消息消费的有序性的?11.&nbsp;你的第一段实习提到了有做过&nbsp;SQL&nbsp;调优是吧?优化的具体背景、遇到的问题以及你的优化思路是什么?12.&nbsp;对于一个&nbsp;(A,&nbsp;B,&nbsp;C)&nbsp;的联合索引,WHERE&nbsp;C='...'&nbsp;AND&nbsp;A='...'和WHERE&nbsp;B='...'&nbsp;AND&nbsp;C='...'这两种查询的索引命中情况分别是什么?13.&nbsp;接T12,为什么数据库索引要遵循最左前缀匹配原则?14.&nbsp;举一些常见的导致索引失效的场景,以及对应的优化方法。15.&nbsp;Redis&nbsp;有哪些常见的数据结构?结合你的实际项目,谈谈在哪些场景下使用过它们。16.&nbsp;什么是&nbsp;Redis&nbsp;的热点&nbsp;Key17.&nbsp;接T24,热点&nbsp;Key&nbsp;会导致什么问题?通常有哪些解决方案?18.&nbsp;什么是&nbsp;TCP&nbsp;拥塞控制?19.&nbsp;总结一下常见的&nbsp;HTTP&nbsp;状态码,例如每种数字开头都是什么含义?20.&nbsp;在前后端都没有新版本上线的情况下,突然收到大量&nbsp;404&nbsp;报警,你会如何排查这个问题?你会去哪里看信息?21.&nbsp;当服务器因为流量过大而扛不住时,一般会返回什么状态码?22.&nbsp;你知道什么是操作系统的局部性原理吗?手撕:23.&nbsp;写一条&nbsp;SQL&nbsp;语句,从一张成绩表&nbsp;(course,&nbsp;student_id,&nbsp;score)&nbsp;中,查询出“数学”课程中考取了最高分的所有学生的student_id和score24.&nbsp;实现一个随机函数,输入为一个整数数组(如[5,&nbsp;2,&nbsp;2,&nbsp;1]),函数的输出为该数组的一个随机下标(0,&nbsp;1,&nbsp;2,&nbsp;3)。要求:每个下标被返回的概率与其对应的值成正比。例如,返回下标&nbsp;0&nbsp;概率是&nbsp;5&nbsp;/&nbsp;(5+2+2+1),即&nbsp;5/10。反问:1.&nbsp;部门业务2.&nbsp;对校招生的预期追问:1.&nbsp;目前手上的Offer情况?2.&nbsp;如果通过,最早什么时候能过来提前实习?3.&nbsp;对工作地点的意向?二面:全程45min左右1.&nbsp;自我介绍2.&nbsp;手撕:给n个骰子,投掷一轮,求点数之和为k的概率(类似于LeetCode1155,DFS暴力出来了,面试官说时间复杂度太高,要求换解法,DP解法没撕出来)3.&nbsp;内存置换算法有哪些?4.&nbsp;现在如果让你去设计一个基于LFU的内存缓存组件,你应该怎么做?5.&nbsp;接T4,怎么找最不经常使用的那个元素呢?(回答构建小根堆)6.&nbsp;接T5,那这样每次查询一个元素,时间复杂度是什么样的呢?7.&nbsp;接T6,怎么才能进一步地降低这个时间复杂度?(回答跳表、哈希桶)8.&nbsp;你实习是带转正的吗?在那边转正了吗?现在是还在职还是离职?答辩预计能过吗?9.&nbsp;实习主要负责什么?10.&nbsp;你觉得能支撑你转正通过的点在哪个方面?11.&nbsp;拷打实习12.&nbsp;goroutine里面出现了panic会有什么后果?13.&nbsp;接T12,如果没recover会怎样?14.&nbsp;接T13,goroutine出现panic,主进程会受影响吗?15.&nbsp;在主协程recover能全局捕获吗?16.&nbsp;MySQL在什么情况下会产生Gap锁?反问:1.&nbsp;算法DP解法?(下去再自己看看)2.&nbsp;提升点
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

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