HashMap 学习心得
2017-05-16 23:22
375 查看
1.构造
HashMap 底层数据结构线性数组,HashMap有一个静态内部类Entry,Entry有四个属性,key,value,next,hashEntry就是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的具体实现是很有帮助的。
相关文章推荐
- Hashtable和HashMap深入学习心得
- Win32调试API学习心得(二)
- unix内核学习心得(二)
- WebService Behavior 学习心得
- Struts1.2.4学习心得!(六)
- 计算机科学与技术学习心得之计算机理论的一个核心问题--续谈其他的一些计算数学(转载)
- Struts1.2.4学习心得!(七)
- 学习Dnn心得
- Struts1.2.4学习心得!(三)
- Struts1.2.4学习心得!(五)
- unix内核学习心得(一)
- lei6.5学习心得
- 学习心得----seh(4)
- JSP学习心得
- Nunit学习心得
- 电脑学习心得
- 学习使用Borland Together心得体会(二)
- 学习EJB CMP/CMR 的心得体会
- 关于MSIL的学习心得
- 计算机科学与技术学习心得之计算机理论的一个核心问题--计算数学基础(转载)