HashMap原理
HashMap基本是每一个面试官都不愿意放过的内容了。这是Java中的热点面试问题,也是很经典的面试热点。
如果能对HashMap有一定的了解,可以更好的帮助你去理解学习相关问题,也能更好的处理业务问题,同时也能让你在面试中和面试官有更好的谈资。你掌握的多少就是决定你和面试官的谈资空间有多大。
1、Java1.8前后的HashMap有什么区别?
在JDK1.2就引入了HashMap,我们都知道在Java1.8中引入了很多的新特性(比如Lambda表达式等),但是在此之后,它的数据存储结构发生了一些变化(优化)。
**在1.8之前是使用数组+链表的方式进行数据存储。**当数据量变大的时候,在访问速度上会有很大的效率影响,所以在1.8之后,如果当链表长度>64并且链表>8的时候就会转化成红黑树的方式进行存储。
在1.8之后是使用数组+链表+红黑树的方式进行数据存储。
2、HashMap的特点
Key可以为Null,不允许重复,线程不安全。
3、HashMap的扩容机制。
HashMap中默认的长度是16,负载因子是0.75。
当HashMap中元素个数超过 默认长度*负载因子 时,就创建一个大小为前一次两倍的新数组,再讲原来数组中的数据复制到新数组中。当数组长度达到64且链表长度大于8时,就会转化成红黑树。
(源码)默认长度:
(源码)负载因子:
(源码)当满足条件就转换成链表+红黑树:
(源码)扩容复制: