我害怕投反对票。无论如何,就像 ArrayList 会有连续的内存分配一样,LinkedList 会有随机的内存分配,HashMap 是如何占用内存的呢?它是否也需要内存中的随机 block ?能否简要介绍一下map的bucket和里面的LinkedLists在内存中是如何定位的内存图?
我希望这不是一个 bs 问题。没有找到很多关于Map的内存分配图的资料。
编辑:我提出的问题与调试/分析无关。这只是关于 HashMap 如何适合内存。我不清楚。
最佳答案
这是两者的结合。
有一个底层的连续数组支持 HashMap
。这个数组的元素实际上是单链表。每次向映射中添加键值对时,都会对键进行哈希处理,并将链表条目添加到后备数组的相应槽(即与键的哈希值对应的槽)。
例如,将 k
映射到 v
的映射可能如下所示:
0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | | | | | | | | | +-X-+-X-+-↓-+-X-+-X-+-X-+-X-+-X-+ ↓ ↓ +---+ | k | | - | | v | +---+
有一个支持 map 的长“表”,以及一个支持特定 k
-to-v
配对的条目。
您最好看看HashMap
source为自己。
关于java - HashMap 是如何占用内存的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418879/