我害怕downvotes。无论如何,就像ArrayList有一个连续的内存分配一样,LinkedList会有一个随机内存分配,HashMap如何占用内存?它是否也在内存中随机存取?我可以简要介绍一下map的存储桶和内部的LinkedLists如何位于内存中的记忆图吗?
我希望这不是一个问题。没有找到关于Map的内存分配图的大量信息。
编辑:我提出的问题与调试/分析无关。它只是关于HashMap如何适应内存。我不清楚它。
答案 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中这是条目)。因此,它也应该采取连续的记忆。