JAVA面试经历

112 阅读1分钟

2021-02-03面试总结

1.hashMap的实现原理

hashMap在JDK1.7里面是由数组+链表的数据结构组成,在1.8是由数组+链表+红黑树组成。 以1.8的hashMap为例,hashMap在put(k,v)时,首先通过位运算计算key的hash值。

当第一个元素插入时,判断当前Map的数组是否为空,如果为空则执行resize()方法,构建长度为16的数组。然后将key的hash值与数组长度减一进行【&】运算,得出当前put的key落在数组的哪个下标上,[此处的计算方法我认为是通过位运算比直接进行【%】运算更快]

如果判断当前数组下标的Node对象为空则直接将元素插入,如果不为空,则需要插入到对应数组下标上的链表或者是红黑树上。如果是链表的话使用尾插法进行插入元素,如果是红黑树的话则去增加红黑树的节点,通过左旋或右旋重构红黑树。当插入链表的Node对象超过8时,则对链表进行树化。