关于hashmap源码的各个参数和属性
1.hashmap的各个参数
1.DEFAULT_INITIAL_CAPACITY
缺省table大小(也就是说table长度为指定时table的默认值)
2.MAXIMUM_CAPACITY
table最大长度
3.DEFAULT_LOAD_FACTOR
缺省负载因子大小(默认为0.75)
4.TREEIFY_THRESHOLD=8
树化阈值(也就是说table的node中的链表长度超过这个阈值的时候,该链表会变成树)
5.UNTREEIFY_THRESHOLD=6
树降级成为链表的阈值(也就是说table的node中的树长度低于这个阈值的时候,树会变成链表)
6.MIN_TREEIFY_CAPACITY=64
树化的另一个参数,就是当hashmap中的node的个数大于这个值的时候,hashmap中的有些链表才会变成树。
这里纠正一个误区,并不是说hashmap中的某个node链表长度大于8就一定会变成树,而是说整个hashmap的node数量大于64,node的链表长度大于8才会变成树
2.hashmap的各个属性
1.transient Node<K,V>[] table;
哈希表
2.transient Set<map.Entry<K,V>> entrySet;
3.transient int size;
当前哈希表中元素个数
4.transient int modCount;
当前哈希表结构修改次数(比如插入或者删除元素,但是比如hasp相同,覆盖不算)
5.int threshold;
扩容阈值,当你的hashmap中的元素个数超过这个阈值,便会发生扩容。(为什么要进行扩容,因为不扩容哈希表中链表的长度便会过长,查找复杂度便会上升)
其中,threshold = capacity * loadFactor
6.final float loadFactor
负载因子