【问题标题】:HashMap iteration complexityHashMap 迭代复杂度
【发布时间】:2016-02-23 11:47:44
【问题描述】:

从 java doc 我知道:

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

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

【问题讨论】:

    标签: java hashmap time-complexity


    【解决方案1】:

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

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

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

    其中loadFactor 是一个float 值,默认设置为0.75f

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

    【讨论】:

      【解决方案2】:

      不,这意味着在 HashMap 上的迭代复杂度是 O(n + s),其中 n 是映射的数量,s 是尺寸。它必须对所有 s 个存储桶进行线性迭代,并对所有 n 个条目进行线性迭代。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2019-04-30
        • 2015-06-16
        • 2017-09-12
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多