美文网首页
Java8中HashMap分析

Java8中HashMap分析

作者: afree_ | 来源:发表于2018-02-08 22:56 被阅读0次

Put方法流程图

特殊值

hash

高16bit不变,低16bit和高16bit做了一个异或

 static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

size

  • map中存储的KV数目
  • 值为2的n次幂
    • 哈希表是通过除法散列法,取模会用到除法运算,效率很低,而HashMap通过 h&(length-1)替代取模
    • length 为2的整数次幂,是为了使不同hash值发生碰撞概率小即更均匀散列
    • length 的值为100..0,length-1为011..1,相当于对取模,而且保证了hash可以奇偶都有

threshold

  • 阀值,=容量*loadFactor(负载因子,默认0.75)

扩容机制

  • hash与旧链表大小做 & 运算,=0不变,=1移动到原位置+旧链表大小的位置


线程是否安全

  • JDK1.7,扩容前后链表导致,转移过程中修改了原来链表中节点引用关系,可能导致死循环
  • JDK1.8,不会引起死循环,但put/get不一定同步

相关文章

  • Java8中HashMap分析

    Put方法流程图 特殊值 hash 高16bit不变,低16bit和高16bit做了一个异或 size map中存...

  • Java8 HashMap源码解析

    前言 Java7中的HashMap和Java8中的HashMap不太一样,Java7中的HashMap主要是由数组...

  • Java8 HashMap源码解析

    Java8 HashMap Java8 在 Java7 的基础上对 HashMap 进行优化,由数组+链表结构,改...

  • HashMap与HashTable区别以及原理解析

    前言 需要知道的是,HashMap在Java8里发生了比较大的变化。在Java8中,table的桶(bucket)...

  • HashMap原理

    图解HashMap(一) 笔记: HashMap是由数组和链表组合构成的数据结构,Java8中链表长度超过8时会把...

  • HashMap源码解析

    1.HashMap结构 HashMap使用的是数组加链表的形式,数组里面存储的是key-value,在java8中...

  • Java集合 —— HashMap源码笔记

    HashMap简介 在 Java8 中,HashMap 是由数组和链表构成的数据结构,当它的链表长度超过8时,会将...

  • jdk1.8源码之HashMap分析

    一、前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的Hash...

  • HashMap 源码解析

    一、前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的Hash...

  • HashMap里面的一个细节

    扫了一眼Java8的HashMap的代码,发现一个细节,觉得值得一记。 我们知道Java8里面的HashMap做了...

网友评论

      本文标题:Java8中HashMap分析

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