hashmap是单向链表吗_HashMap原理详解,看不懂算我输(附面试题)
HashMap的原理与实现
版本之更迭:
–》JDK 1.7 : Table数组+ Entry链表;–》JDK1.8 : Table数组+ Entry链表/红黑树;(为什么要使用红黑树?)
一问HashMap的实现原理
- 你看过HashMap源码吗,知道底层的原理吗
- 为什么使用数组+链表
- 用LinkedList代替数组可以吗
- 既然是可以的,为什么不用反而用数组。
重要变量介绍:
ps:都是重要的变量记忆理解一下最好。
- DEFAULT_INITIAL_CAPACITY Table数组的初始化长度: 1 << 4 2^4=16(为什么要是 2的n次方?)
- MAXIMUM_CAPACITY Table数组的最大长度: 1<<30 2^30=1073741824
- DEFAULT_LOAD_FACTOR 负载因子:默认值为0.75。 当元素的总个数>当前数组的长度 * 负载因子。数组会进行扩容,扩容为原来的两倍(todo:为什么是两倍?)
- TREEIFY_THRESHOLD 链表树化阙值: 默认值为 8 。表示在一个node(Table)节点下的值的个数大于8时候,会将链表转换成为红黑树。
- UNTREEIFY_THRESHOLD 红黑树链化阙值: