美文网首页
LinkedHashMap、HashMap比较

LinkedHashMap、HashMap比较

作者: 大黑跟小白的日常 | 来源:发表于2019-01-16 23:38 被阅读217次

    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

    相关文章

      网友评论

          本文标题:LinkedHashMap、HashMap比较

          本文链接:https://www.haomeiwen.com/subject/kbtbdqtx.html