gpt4 book ai didi

java - HashMap 是如何占用内存的?

转载 作者:IT王子 更新时间:2023-10-28 23:37:53 26 4
gpt4 key购买 nike

我害怕投反对票。无论如何,就像 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com