从java doc我知道:
对集合视图的迭代需要与时间成比例的时间 HashMap实例的“容量”(桶的数量)加上它 size(键值映射的数量)。因此,非常重要 如果设置初始容量太高(或负载系数太低) 迭代性能很重要。
这是否意味着通过HashMap迭代的时间复杂度 O (n²)?这个问题可能听起来很傻,但实际上我有点困惑。
答案 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 条目上线性迭代。