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