以下内容属于笔记,如有人阅读并发现错误,请不吝指出。
首先先了解下HashMap的实现原理,HashMap使用数组和链表的形式存储数据,这是HashMap的牛X所在。一开始,我只看到HashMap中时Entry[]的形式存储数据,很久以后,但我看到next关键字后才意识到,Entry是个链表结构。
如下代码:
HashMap的put方法截图① HashMap的添加元素Entry方法截图②我们知道,当你使用put方法将键值对放入HashMap中时,首先会对key值去hash值确定Entry数组中的位置,如果这个位置上已经有元素存在,就会去遍历该位置上的Entry链表对象,替换或者赋值给Entry。
比如,依次加入如下三个元素:(Aa与BBhashcode值相同)
HashMap添加元素最后的结果是Entry数组中元素为
添加结果BB=2222的next指向Aa=2222,Aa=1111被最后一次Aa=2222给更新了
HashMap链表结构图截具体的过程如下:
第一次放入Aa=1111,在Entry数组下标下标为4的地方放入,之后在放入BB=2222时,由于Aa与BB的hashcode相同,得到Entry数组下标也为4,就会在该位置插入BB=2222,并将BB=2222的next指向Aa=1111(执行②中BB的next指向Aa),最后再放入Aa=2222,又是数组下标为4,取该位置的Entry链表,取next,发现为Aa=1111,于是将Aa=1111更新为2222(执行①中for循环进行更新).
网友评论