Java面试集-基础-HashMap集合

数据结构

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变量,其他线程的均会丢失

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容