【发布时间】:2015-08-22 17:53:47
【问题描述】:
根据这个问题
how-does-a-hashmap-work-in-java 和 this
许多键值对可以存储在同一个桶中(在使用哈希计算桶的索引之后),当我们调用get(key)时,它会查看链表并使用equals方法进行测试。
对我来说听起来并没有真正优化,不是在使用equals之前比较链接列表的hashCodes吗?
如果答案是否定的:
这意味着大部分时间桶只包含 1 个节点,你能解释一下为什么吗?因为根据this logical explanation,许多不同的键可能具有相同的桶索引。
如何实现密钥的良好分配?这可能意味着桶表的大小与键的数量有关
即使Table Bucket的大小等于key的个数,HashMaphashCode函数如何保证key的良好分布?不是随机分布吗?,
我们可以提供更多详细信息吗?
【问题讨论】:
-
这是由他在链接问题中的第一个答案回答的。
-
不,它说:hashmap 然后会查看相应的存储桶,然后它将您提供的密钥与存储桶中所有对的密钥进行比较,方法是将它们与 equals() 进行比较。
-
哪个回答了您的问题“它是否比较链表的哈希码而不是等于?”。 (即“不”)
-
但它没有优化,许多元素可以共享同一个桶,我更新我的问题
-
通常这不会发生,除非你的对象的
hashCode没有很好地实现,所以最后一个简单的put操作将花费O(N),但这不是@ 的问题987654331@ 实现,在key的hashCode中。
标签: java