【发布时间】:2016-02-23 11:47:44
【问题描述】:
从 java doc 我知道:
对集合视图的迭代需要的时间与 HashMap 实例的“容量”(桶数)加上它的 大小(键值映射的数量)。因此,非常重要的是不 将初始容量设置得太高(或负载系数太低),如果 迭代性能很重要。
这是否意味着迭代HashMap的时间复杂度是O(n²)?这个问题可能听起来很傻,但我其实有点困惑。
【问题讨论】:
标签: java hashmap time-complexity
从 java doc 我知道:
对集合视图的迭代需要的时间与 HashMap 实例的“容量”(桶数)加上它的 大小(键值映射的数量)。因此,非常重要的是不 将初始容量设置得太高(或负载系数太低),如果 迭代性能很重要。
这是否意味着迭代HashMap的时间复杂度是O(n²)?这个问题可能听起来很傻,但我其实有点困惑。
【问题讨论】:
标签: java hashmap time-complexity
不,这并不意味着迭代复杂度为 O(n2)。
当容量c自动设置时,它会随着项目的数量增长为O(n),而不是项目的O(n2)。根据源码,目标容量计算如下:
int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1);
其中loadFactor 是一个float 值,默认设置为0.75f。
您引用的段落仅在您手动设置容量时才相关。它告诉您性能是 O(c),而不是 O(n),其中c 是您设置的容量或自动计算的容量。
【讨论】:
不,这意味着在 HashMap 上的迭代复杂度是 O(n + s),其中 n 是映射的数量,s 是尺寸。它必须对所有 s 个存储桶进行线性迭代,并对所有 n 个条目进行线性迭代。
【讨论】: