HashMap是基于哈希表的数据结构,用于存储键值对。其核心是将键的哈希值映射到数组的索引位置。在JDK1.7以前,通过数组,链表来解决哈希冲突。JDK1.8以后通过数组,链表,红黑树来处理哈希冲突。
HashMap的初始容量是16,负载因子是0.75。如果数组容量超过16*0.75=12后,则开始扩容操作。容量*2并重新分配元素位置。
具体添加键值对的方式是这样的:
首先通过key计算出table的一个索引
判断索引处是否有值
没有,直接插入
有,要判断value是否相同
相同,替换即可
不同的话,还要判断此时是红黑树结构还是链表结构
红黑树添加元素操作
链表添加元素操作
尾插法后,判断当前链表长度是否超过8,数组长度是否超过64。如果是,则转换成红黑树。或者检验table表是否需要扩容。