请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于几个概念的问题

1.HashMap初始容量是16个,这个初始容量是不是指的是初始的时候就有16个桶,这16个桶组成一个数组,那么数组长度是不是应该是16,而后面在讲树华条件判定的时候,又说了一个最小树化容量是64,并且也有人把最小树化容量称为数组长度,这里有点混淆。导致树化和扩容的判定条件就不清楚了

2.这个HashMap的结构我是这么理解的,一个HashMap有16个桶(相当于一个数组),添加根据Hash值找的不同桶,Hash值相同的放在一个桶里,而树化是发生在单个桶里的,如果这样,是不是存在这样一个现象,有的桶是链表,有的桶是红黑树的结构?

正在回答

1回答

翔仔 2020-03-07 00:14:13

同学好,1.感觉你弄混淆了相关概念,bucket数量默认是16,最小树化容量指的是你hashmap的size值,也就是所有桶里面的元素加和,如果超过64,则满足最小的树化条件,单桶则是你要超过8个的时候,并且总体超过64就会开始树化,否则会扩容

2.是的,确实是这样,有的是链表,有的是树化结构。

其实直接看源码就了解啦

0 回复 有任何疑惑可以回复我~
  • 提问者 autumn_luo #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-03-07 10:20:20
  • 提问者 autumn_luo #2
    还想问一下扩容相关的。根据老师说的有两种:
    1.单桶的TREEIFY——THRESHOLD的值超过8,但是最小树化容量小于64,会发生扩容
    2.当一个HashMap的填满了75%的bucket时(按照JDK默认的扩容因子),会发生扩容。
    3.如果按照第二种的说法,如何去判断一个桶是否装满了。
    4.两种扩容的判定方法以哪个为准,或者两者如何让结合使用
    回复 有任何疑惑可以回复我~ 2020-03-07 10:41:38
  • 提问者 autumn_luo #3
    还有个问题,当一个HashMap一个桶发生了第一次树化之后,只要后面其余的桶当中的TREEIFY——THRESHOLD一旦超过8,那个桶一定会发生树化。这个说法是否正确
    回复 有任何疑惑可以回复我~ 2020-03-07 10:45:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信