LinkedHashMap、HashMap比较
HashMap取出数据的顺序(数据的存储顺序),应该是跟key的hashCode有关的。
1、属于一种hashMap
public class LinkedHashMapextends HashMap<K,V>implements Map {
2、相比于HashMap,linkedHashMap结构中还维护着一个双向链表,用于记录顺序。所以可以做到跟存入顺序一样取出元素。
3、hashMap键只能允许为一条为空,value可以允许为多条为空,键唯一,但值可以多个。linkedHashMap键和值都不可以为空。
4、linkedHashMap在于存储数据你想保持存进入的顺序与被取出的顺序一致的话,优先考虑LinkedMap。
HashMap源码解读
1、默认初始化容量大小1<<4 = 16;
2、最大容量1<<30 = 2的30次方;
3、默认负载因子0.75f;
4、链表树形化阈值为8(用于hash冲突产生链表还是产生红黑树的一个判断值);TREEIFY_THRESHOLD =8
如果哈希函数不合理,即使扩容也无法减少箱子中链表的长度,因此 Java 的处理方案是当链表太长时,转换成红黑树。这个值表示当某个箱子中,链表长度大于 8 时,有可能(第6点是确定因素)会转化成树;
5、在哈希表扩容时,如果发现链表长度小于 6,则会由树重新退化为链表;UNTREEIFY_THRESHOLD =6
6、在转变成树之前,还会有一次判断,只有键值对数量大于 64 才会发生转换。这是为了避免在哈希表建立初期,多个键值对恰好被放入了同一个链表中而导致不必要的转化;MIN_TREEIFY_CAPACITY =64
HashMap中的内部类Node
网友评论