您的位置:首页 > 编程语言 > Java开发

关于java的HashMap

2016-01-29 12:45 281 查看
直入主题。点击如入HashMap的源码,我们能看到



map也是用数组实现的,只不过数组类型是



,而Entry也实现了Map,而我们实际上总是说的map key对应的其实是Entry的key。

接下来我们来看Entry的属性,我们能看到我们最熟悉的key、value、hash,但是next是什么呢?我们这里先保持下疑问。

接下来我们来看我们最常用的put方法,!



我们可以看出答题可以分四部分。第一,根据hashcode获得hash值;第二,根据hash值获得对应数组的index;第三,遍历对应数组的元素(在这里我们就可以看到Entry.next的作用了,看来Entry保存的是一个链,相同的hash值就可以保存在这个链里),如果找到key对应的值,然后将其替换,返回原来的值;第四,如果没有找到相同的key,就添加一个新的Entry。

接下来我们看addEntry这个方法,



从这个方法里能看出,e记原来的数组元素引用,然后new一个新的Entry将其赋值为数组元素引用,然后可以看出e也是有传入新Entry对象的,这样就可以说通了,e是赋予next的,这样原来的链不会丢失(可以通过第一个元素的next获得),每次添加进一个新都会成为新的header,这模式就是链表的结构了。后面我们还会hashmap根据自己策略进行扩容。

所以总体的来说,hash就是数组和链表的实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: