HashMap如何占用内存?

时间:2014-05-02 00:24:38

标签: java memory hashmap

我害怕downvotes。无论如何,就像ArrayList有一个连续的内存分配一样,LinkedList会有一个随机内存分配,HashMap如何占用内存?它是否也在内存中随机存取?我可以简要介绍一下map的存储桶和内部的LinkedLists如何位于内存中的记忆图吗?

我希望这不是一个问题。没有找到关于Map的内存分配图的大量信息。

编辑:我提出的问题与调试/分析无关。它只是关于HashMap如何适应内存。我不清楚它。

2 个答案:

答案 0 :(得分:6)

这是两者的结合。

有一个支持HashMap的基础连续数组。这个数组的元素实际上是单链表。每次向地图添加键值对时,都会对键进行哈希处理,并将链接列表条目添加到后备阵列的相应插槽中(即与键的哈希值对应的插槽)。

例如,将k映射到v的地图可能如下所示:

  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |
+-X-+-X-+-↓-+-X-+-X-+-X-+-X-+-X-+
          ↓
          ↓
        +---+
        | k |
        | - |
        | v |
        +---+

有一个支持地图的长“表”,以及支持特定k - 到 - v配对的条目。

您可能最好自己查看HashMap source

答案 1 :(得分:0)

散列映射始终是一个数组,其中可以确定散列码以获取数组元素的索引(在jdk中这是条目)。因此,它也应该采取连续的记忆。