HashMap迭代复杂度

时间:2015-11-20 21:03:15

标签: java hashmap time-complexity

从java doc我知道:

  

对集合视图的迭代需要与时间成比例的时间   HashMap实例的“容量”(桶的数量)加上它   size(键值映射的数量)。因此,非常重要   如果设置初始容量太高(或负载系数太低)   迭代性能很重要。

这是否意味着通过HashMap迭代的时间复杂度 O (n²)?这个问题可能听起来很傻,但实际上我有点困惑。

2 个答案:

答案 0 :(得分:8)

不,这并不意味着迭代复杂度为O(n 2 )。

当自动设置容量c时,它会以项目数增加为O(n),而不是项目的O(n 2 )。根据源代码,目标容量计算如下:

int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1);

默认情况下,loadFactor的{​​{1}}值设置为float

只有在手动设置容量时,引用的段落才会相关。它告诉你性能是O(c),而不是O(n),其中0.75f是你设置的容量或自动计算的容量。

答案 1 :(得分:3)

不,这意味着HashMap上迭代的复杂度为O(n + s),其中 n 是映射数和 s 是大小。它必须在所有 s 桶上线性迭代,并在所有 n 条目上线性迭代。