【问题标题】:How much size a HashMap will consume? [duplicate]HashMap 将消耗多少大小? [复制]
【发布时间】:2019-01-08 10:39:59
【问题描述】:

我最近在一次采访中被问到一个问题,例如,如果创建一个具有 100 个键值对的 HashMap,它将消耗多少内存..?谁能解释一下地图中每个条目的消耗量。

【问题讨论】:

  • 严格来说,这个问题不能一概而论,因为这是一个实现细节。
  • 在实践中,有这个相关的问题:stackoverflow.com/questions/6157363/…
  • 不接受工作机会。跑。运行。
  • 面试答案应该明确,(简化!)哈希映射在内部保留一个大于 100 个条目的数组,以便通过哈希码模数组大小找到一个或多个条目。该数组由初始容量 - size - 和负载因子 (0.0 - 1.0) 控制。

标签: java collections hashmap


【解决方案1】:

这取决于平台,例如JVM 使用压缩选项、内存中的对象对齐、散列中的冲突等。除此之外,您还必须包括键和条目的大小,它们是单独的对象。要获取数据结构的实际内存使用情况,您应该检查内存转储,但即便如此it's not straightforward

如果您可以将问题简化为标准java.util.HashMap 的大小、容量和负载系数,那么:

  • 根据设计,容量始终是 2 的幂,因此大小必须至少为 128。
  • 默认负载系数为 0.75。要以 0.75 的负载因子存储 100 个元素,我们需要 256 的容量,因为 128 是不够的 (128 * 0.75 = 96
  • 由于上述HashMap 将存储一个大小为256 的Node[] table 以容纳100 个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 2017-10-07
    • 1970-01-01
    • 2017-11-23
    • 2012-09-04
    • 2018-03-13
    • 2015-07-02
    • 2016-01-23
    相关资源
    最近更新 更多