我知道由于可能的冲突,散列映射操作被O(1)摊销。但在java中,integer.hashCode只是它的值。然后,如果你要将m个不同的整数放入一个散列图中,其中m = hashmap的INITIAL_CAPACITY(16假设)这是否意味着将有16个不同的桶,每个桶有1个整数?那么这会保证O(1)查找,删除,插入最差时间吗?
答案 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会增加大小)。
这可以保证O(1)查找,删除,插入最差时间吗?
不,特别是在不良情况下,查找时间可以达到O(n)(取决于元素的数量及其值)。在整数的情况下,所有posible int值都映射到hashmap大小,因此对于小尺寸的地图可能会发生很多碰撞。
答案 3 :(得分:0)
否,因为HashMap
会为了内部目的重新散列哈希值。