HashMap面试题汇总(附2020年最新大厂面试题、答案)
1,HashMap底层存储结构 HashMap在Jdk1.7的时候采用的是数组加链表的数据结构,jdk1.8之后采用了数组加链表加红黑树的数据结构。观察源码可知HashMap类中有一个非常重要的字段就是Node[] table,即哈希桶数组。而Node是HashMap的一个内部类,实现了Map.Entry接口,本身就是一个键值对。 2,解决Hash冲突的方法,HashMap采用了什么方法解决Hash冲突? HashMap使用哈希表来存储数据的,当然哈希表不可避免的就会遇到hash冲突问题,解决hash冲突的方法大致有两种:1,开放地址法。2,链地址法。 1,开放地址法:当地址发生冲突时,按着某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。 2,链地址法:链地址法就是数组加链表的结合,在每一个数组元素上都有一个链表结构,当地址发生冲突时就讲数据存放在链表中。 而HashMap就是采用链地址法进行解决hash冲突的。 3,jdk1.8的HashMap中的链表达到多少个时会生成红黑树? HashMap用链地址法解决hash冲突,则当链表里的长度太长就会严重影响HashMap的性能。于是在jdk1.8里,对数据结构做了进一步优化,引入了红黑树,当链表长度大于8的时候,链表就会转成红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除