HashMap底层原理
hashMap底层原理主要是jdk1.7和1.8以上的区别。
jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现。
参考学习:
https://blog.csdn.net/jswd_50x/article/details/86542240
HashMap面试题
1.谈一下HashMap的特性?
2.谈一下HashMap的底层原理是什么?
3.谈一下hashMap中put是如何实现的?
4.谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?
5.谈一下hashMap中get是如何实现的?
6.谈一下HashMap中hash函数是怎么实现的?还有哪些hash函数的实现方式?
7.为什么不直接将key作为哈希值而是与高16位做异或运算?
8.为什么是16?为什么必须是2的幂?如果输入值不是2的幂比如10会怎么样?
https://blog.csdn.net/sidihuo/article/details/78489820 https://blog.csdn.net/eaphyy/article/details/84386313
9.谈一下当两个对象的hashCode相等时会怎么样?
10.如果两个键的hashcode相同,你如何获取值对象?
11."如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?
12.HashMap和HashTable的区别
13.请解释一下HashMap的参数loadFactor,它的作用是什么?
14.传统hashMap的缺点(为什么引入红黑树?):
15. 平时在使用HashMap时一般使用什么类型的元素作为Key?
16.JDK7和JDK8的区别
1.JDK8中链表会转为红黑树 2.新节点插入链表的顺序不同(JDK7是插入头结点,JDK8因为要遍历链表把链表变为红黑树所以采用插入尾节点) 3.hash算法简化。 4.resize的逻辑修改(JDK7会出现死循环,JDK8不会) 死锁场景:https://blog.csdn.net/qq_36071795/article/details/83655029 弄懂死锁:https://blog.csdn.net/weixin_34041003/article/details/87986378?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task