阿里P7岗位面试,面试官问我:为什么HashMap底层树化标准的元素个数是8

前言

先声明一下,本文有点标题党了,像我这样的菜鸡何德何能去面试阿里的P7岗啊,不过,这确实是阿里p7级岗位的面试题,当然,参加面试的人不是我,而是我部门的一个大佬。他把自己的面试经验分享给了我,也让我间接体会下阿里级别的面试难度,这样算起来,我也勉强算是经历面试过阿里P7的岗位的人吧,顿时感觉信心暴涨。
在这里插入图片描述

常见的面试题

对于HashMap,我们再熟悉不过了,日常开发最常用的Java集合类就是它了,而且面试的时候对于HashMap知识点基本是必问的,就拿我之前的面试经历来看,问的最多的无非是这么几个:

1、HashMap的底层存储结构是怎样的啊?

2、线程安全吗?为什么不安全?

3、1.7和1.8版本的HashMap有什么区别?1.7的有什么隐患,什么原因导致的?

4、hashcode是唯一的吗?插入元素的时候怎么比较的?

5、跟HashTable,ConcurrentHashMap有什么区别?

对于这些问题,如果你看过一些博客,或者大概的浏览过源码的话,基本都能答出来,我之前参加过很多面试,也很少在HashMap这块失过手。

事实证明,我还是年轻了点(怎么说也是90后的)。有时候,你答的好不是因为你懂得多,而是人家问的不深,如果你没有对源码做深入的了解和思考的话,别人稍微换个角度考察,你也许就会犯难了。

就好像标题上的题目,为什么HashMap链表树化的标准是8个?说实话,尽管我之前也知道是树化的阈值是8,但是为什么是这个数目我还真没仔细的思考过,借着这个机会,我也重新梳理了遍HashMap的源码,本文也算是一些新的思考点的总结吧。

HashMap的基本知识点

HashMap可以说是Java项目里最常用的集合类了,作为一种典型的K-V存储的数据结构,它的底层是由数组 - 链表组成,当添加新元素时,它会根据元素的hash值找到对应的"桶",也就是HashMap源码中Node<K, V> 里的元素,并插入到对应位置的链表中,链表元素个数过长时会转化为红黑树(JDK1.8后的版本),
在这里插入图片描述

为什么要转成红黑树呢?

我们都知道,链表取元素是从头结点一直遍历到对应的结点,这个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值