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

相关推荐

大摆哥:刚好要做个聊天软件,直接让你帮他干活了
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客企业服务