java HashMap的理解

HashMap继承自AbstractMap,由一个哈希数组(哈希表)+链表结构组成,通过对key的hashCode值做hash(哈希函数)运算得到一个存放在哈希数组的角标,进而往哈希表里存入Entry(键值对)


java HashMap的理解_第1张图片
image.png

一般情况下哈希数组的初始大小为11,元素大小超过阈值会按照原来容量的2倍+1的方式自动扩容,阈值由负载因子(默认0.75*容量)决定,扩容的过程会新建一个数组然后把旧数据复制到新数组中
Entry里维护了下一个元素的哈希指向,是一个单向链表结构,这么做的目的是为了防止不同的key进行hash算法后出现冲突(得到一个相同的数组下标),这时候就会把这个Entry放在哈希数组里已有的Entry的后面,从而造成如下图的结构:


java HashMap的理解_第2张图片
image.png

HashMap不是线程安全的,如果要保证线程安全可以使用ConcurrentHashMap

你可能感兴趣的:(java HashMap的理解)