关于hashmap的问题
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 才会发生转换。这是为了避免在哈希表建立初期,多个键值对恰好被放入了同一个链表中而导致不必要的转化;
Java中的HashMap、LinkedMap、TreeMap解释下?
(TreeMap红黑树,有序,HashMap无序,数组+链表/红黑树)
-
HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况下表现不佳。
-
LinkedHashMap继承自HashMap,相比于HashMap,linkedHashMap结构中还维护着一个双向链表,