前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HashMap 学习心得

HashMap 学习心得

作者头像
Janti
发布2018-04-10 16:23:33
8670
发布2018-04-10 16:23:33
举报
文章被收录于专栏:JantiJanti

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的具体实现是很有帮助的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.构造
  • 2.hash碰撞
  • 3.get方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档