hashmap hashcode获取最坏情况的常量时间?

时间:2013-11-04 02:09:18

标签: java hashmap hashcode

我知道由于可能的冲突,散列映射操作被O(1)摊销。但在java中,integer.hashCode只是它的值。然后,如果你要将m个不同的整数放入一个散列图中,其中m = hashmap的INITIAL_CAPACITY(16假设)这是否意味着将有16个不同的桶,每个桶有1个整数?那么这会保证O(1)查找,删除,插入最差时间吗?

4 个答案:

答案 0 :(得分:0)

不,因为HashMap将不得不采用hashCode返回的大量可能值并将它们映射到极少数桶,并且无法保证该映射会将不同整数的哈希码映射到不同的桶

答案 1 :(得分:0)

你应该看看Hashmap决定键/对象将属于哪个存储桶的方式,并且yu将看到它不使用对象的hashCode()作为存储桶编号但是稍微操纵它(位移)以限制数量存储桶小于Integer.MAX_VALUE

答案 2 :(得分:0)

  

如果你要将m个不同的整数放入一个m =的hashmap中   hashmap的INITIAL_CAPACITY(16让我们说)这意味着那里   将是16个不同的桶,每个桶有1个整数?

取决于值,可能HashMap将创建新桶(增加容量)以将负载因子保持在最小值(如果负载超过75%,则Java HashMap会增加大小)。

What is load factor

  

这可以保证O(1)查找,删除,插入最差时间吗?

不,特别是在不良情况下,查找时间可以达到O(n)(取决于元素的数量及其值)。在整数的情况下,所有posible int值都映射到hashmap大小,因此对于小尺寸的地图可能会发生很多碰撞。

答案 3 :(得分:0)

否,因为HashMap会为了内部目的重新散列哈希值。