哈希映射如何占用内存?
我害怕投反对票。无论如何,就像ArrayList有一个连续的内存分配,一个LinkedList会有一个随机的内存分配,HashMap如何占用内存?它是否也会在内存中占用随机块?我能否简要介绍一下映射的存储桶和内部的LinkedLists在内存中的位置的内存图?
我希望这不是一个bs问题。没有找到太多关于Map的内存分配图的信息。
编辑:我提出的问题与调试/分析无关。这只是关于HashMap如何适应内存。我不清楚。
我害怕投反对票。无论如何,就像ArrayList有一个连续的内存分配,一个LinkedList会有一个随机的内存分配,HashMap如何占用内存?它是否也会在内存中占用随机块?我能否简要介绍一下映射的存储桶和内部的LinkedLists在内存中的位置的内存图?
我希望这不是一个bs问题。没有找到太多关于Map的内存分配图的信息。
编辑:我提出的问题与调试/分析无关。这只是关于HashMap如何适应内存。我不清楚。
这是两者的结合。
有一个底层的连续数组支持 。此数组的元素实际上是单链表。每次向映射添加键值对时,都会对键进行哈希处理,并将链接列表条目添加到后备数组的相应槽(即与键的哈希值对应的槽)中。HashMap
例如,映射到的地图可能如下所示:k
v
0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | | | | | | | | | +-X-+-X-+-↓-+-X-+-X-+-X-+-X-+-X-+ ↓ ↓ +---+ | k | | - | | v | +---+
有一个支持地图的长“表”,以及一个支持特定配对的条目。k
v
您最好自己查看HashMap
源代码。
哈希映射始终是一个数组,其中可以确定哈希码以获取数组元素的索引(在jdk中,这是条目)。因此,它也应该需要连续的记忆。