Java面试集-基础-HashMap集合

作者: Hibug | 来源:发表于2019-10-09 18:03 被阅读0次

    数据结构

    JDK1.7 是数组+链表:链表是单向链表,新添加的节点在前面。

    JDK1.8 是红黑树。

    hashCode

    hashCode相同,值不一定相同。
    equals相同,值一定相同。

    扩容相关

    默认长度为16
    什么时候开始扩容,size >= 12

    例子:

    System.out.println("Ma".hashCode());
    System.out.println("NB".hashCode());
    //hashcode值都等于2484
    

    扩容

    image.png

    hashmap为什么线程不安全

    1. put()方法;

    场景:当有a,b,c,d 4个线程同时进入到这个方法操作同一个Key的时候,其中b做的修改,a,c,d做的是读操作,那么有可能读的不是同一个值。

    2. resize()方法

    场景:当有a,b,c,d 4个线程可能同时触发扩容的操作,各自生成新的数组并rehash后赋给该map底层的数组table,结果最终只有最后一个线程生成的新数组被赋给table变量,其他线程的均会丢失

    相关文章

      网友评论

        本文标题:Java面试集-基础-HashMap集合

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