HashMap如何占用内存?

Nih*_*rma 7 java memory hashmap

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

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

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

ars*_*jii 6

这是两者的结合.

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

例如,地图映射kv可能是这样的:

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

还有很长的"表"是背地图,支持特定的条目k至- v配对.

您可能最好自己查看HashMap源代码.

  • @NihalSharma再次,它是一种混合体.当你添加更多条目时,它会在第二个维度"增长"(如果这是你选择考虑它的方式).请注意,从性能角度来看,您实际上希望映射尽可能地平坦,因此如果添加了许多条目,则将重新分配后备阵列并增加其大小. (2认同)
  • 现在你有了一个简单的解释。这是完整的核心细节。http://en.wikipedia.org/wiki/Hash_table (2认同)