在HashMap中,数组大于等于64的时候,是链表大于8的时候会树化?还是大于等于8的时候会树化?
对于该问题争议还是蛮大的,有些小伙伴自己去看源码,发现源码写的,跟特喵故意让我们看不懂似的,乱七八糟滴。
那我们既然看不懂源码,那咱笨有笨的法子,自己直接来证实一下!
代码如下:HashMap初始大小定义为64,因为数组大于等于64的时候且链表长度大于8的时候链表才会进行树化。此处我一共找了9个key,在数组为64的大小时,这9个key会被存放在同一个索引下。我们可以先put8个key,并在输出语句处以及源码(树化方法处)打上断点。要是停在了源码的断点,意思不就是链表等于8的时候它就要树化了吗。要是停在了输出语句的断点,那不就是没有树化吗。经过运行,断点停在了输出语句处,放行后运行结束。说明等于8的时候不会进行树化!
同样在这两个地方打上断点,不同的是加上一个key,即9个key,这个时候看看会停在哪个断点。
运行后发现停在了源码的断点。那结论不就出来了吗?即大于8的时候才会树化。
可能有些小伙伴又有疑问了,你怎么知道这九个key会放在一个索引上呢?那我懒得叼你,只能给你看下这个图了:
当然,小伙伴们最好自己试一下,不仅仅是这个问题,所有具有争议的问题都是,不自己试一下,永远不知道自己背的到底是对是错。就像我,我一直以为等于8就会树化,毕竟源码写的我看着是真心烦。
HashMap是链表大于8的时候会树化?还是大于等于8的时候会树化?
于 2023-11-07 21:41:41 首次发布