首页 > 代码库 > HashMap 学习心得

HashMap 学习心得

1.构造

HashMap 底层数据结构线性数组,HashMap有一个静态内部类Entry,Entry有四个属性,key,value,next,hash

技术分享

Entry就是HashMap键值对实现的一个基础bean,HashMap的数据全都存在了Entry[]里面,技术分享

所以说HashMap是一个线性数组

2.hash碰撞

hash值不会碰撞,因为Entry的next属性,作用是指向下一个Entry。打个比方,第一个键值对A进来,通过计算其key的hash得到的index=0,记做:Entry[0] = A。一会后又进来一个键值对B,通过计算其index也等于0,现在怎么办?HashMap会这样做:B.next = A,Entry[0] = B,如果又进来C,index也等于0,那么C.next = B,Entry[0] = C;这样我们发现index=0的地方其实存取了A,B,C三个键值对,他们通过next这个属性链接在一起

 

3.get方法

首先看具体实现,首先做了下校验,然后用了个getEntry方法

技术分享

getEntry方法具体实现

技术分享

 首先做一个校验,然后算出key的hash值,遍历Entry,定位找到该云素。主要是根据hash值和Entry.key取的交集。

看到jdk中这么多校验,所以以后自己写代码的时候,要三思,接受的数据出现意外情况怎么办,多做一些校验总是没错的。

 

4.put方法

什么都不说,先来看代码

技术分享

 

技术分享

这里,HashMap在添加元素时,会判断不停的判断添加元素后大小是否大于阈值,如果大于的话则两倍扩充。

(这里也是很值得大家学习的,不要将数组写死哦,要支持动态扩展哦)

技术分享

 

总结:HashMap在java编程中时是非常常见的,所以熟悉hashMap的具体实现是很有帮助的。

 

HashMap 学习心得