您的位置:首页 > 其它

HashMap数组结构与链表结构的实现例子

2018-01-14 13:45 218 查看
以下内容属于笔记,如有人阅读并发现错误,请不吝指出。

首先先了解下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循环进行更新).

[align=center]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息