- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HashMap的数据结构要点
1. HashMap的数据结构
数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。
????? 数组
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;
链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。
那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。
从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,12%16=12,28%16=12,108%16=12,140%16=12。所以12、28、108以及140都存储在数组下标为12的位置。
HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。
首先HashMap里面实现一个静态内部类Entry,其重要的属性有?key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。
????/**
?????*?The?table,?resized?as?necessary.?Length?MUST?Always?be?a?power?of?two.
?????*/
????transient?Entry[]?table;
2. HashMap的存取实现
? ? ?既然是线性数组,为什么能随机存取?这里HashMap用了一个小算法,大致是这样实现:
// 存储时:int?hash?=?key.hashCode();?// 这个hashCode方法这里不详述,只要理解每个key的hash是一个固定的int值int?index?=?hash?%?Entry[].length;Entry[index]?=?value;// 取值时:int?hash?=?key.hashCode();int?index?=?hash?%?Entry[].length;return?Entry[index];
?public?V?put(K?key,?V?value)?{
????????if?(key?==?null)
????????????return?putForNullKey(value);?//null总是放在数组的第一个链表中????????int?hash?=?hash(key.hashCode());
????????int?i?=?indexFor(hash,?table.length);
????????//遍历链表????????for?(EntryK,V?e?=?table[i];?e?!=?null;?e?=?e.next)?{
????????????Object?k;
????????????//如果key在链表中已存在,则替换为新value????????????if?(e.hash?==?hash??((k?=?e.key)?==?key?||?key.equals(k)))?{
????????????????V?oldValue?=?e.value;
????????????????e.value?=?value;
????????????????e.recordAccess(this);
????????????????return?oldValue;
????????????}
????????}
????????modCount++;
????????addEntry(hash,?key,?value,?i);
????????return?null;
????}
?
void?addEntry(int?hash,?K?key,?V?value,?int?bucketIndex)?{
????EntryK,V?e?=?table[bucketIndex];
????table[bucketIndex]?=?new?EntryK,V(hash,?key,
您可能关注的文档
- GPS生产方式-通过彻底地排除浪费从而降低成本的推进方略要点.ppt
- GnRH脉冲泵有效性和安全性研究伦理要点.ppt
- GROW成长教练步骤要点.ppt
- GROVE球阀要点.ppt
- GSP认证程序与文书书写要点.ppt
- GIS和高压断路器的在线监测与故障诊断要点.ppt
- HACCP七个原理要点.ppt
- HACCP新标准讲义1要点.ppt
- hadoop面试题要点.doc
- GypsLyon技术专题课件要点.ppt
- 7.1两条直线的位置关系(第2课时)六年级数学下册(鲁教版2024).pptx
- 第3课 “开元盛世”(课件)七年级历史下册课件(统编版2024) (2).pptx
- 2.3中国传统山水画(课件)高一美术上册(人教版2019).pptx
- 第20课 三国两晋南北朝时期的科技与文化-统编版(2024)七年级历史上册.pptx
- 1B U8Traffic Safety课件 初中英语课件.pptx
- Unit 4 Plants around us Part A letters and sounds人教PEP版(2024)英语三年级上册.pptx
- Unit 4 My pet(课件)人教PEP版(一起)(2024)英语一年级下册.pptx
- 7.1两条直线的位置关系(第1课时)六年级数学下册(鲁教版2024).pptx
- 1.3 网络交流 课件 清华大学版(2024)A版初中信息科技七年级下册.pptx
- 2.4画外之意(课件)高一美术鉴赏上册(人教版2019).pptx
最近下载
- 《静电防护培训》课件.ppt VIP
- 纳米技术在医学治疗中的应用.pptx VIP
- 保健院HIV感染孕产妇临产预案.doc VIP
- 流程管理 空分基本概念与流程组织.pdf VIP
- 创伤严重程度(AIS)(ISS)评分表(完整版).docx VIP
- 中职旅游服务与管理专业人才培养方案.docx VIP
- 大学生劳动就业法律问题解读知到课后答案智慧树章节测试答案2025年春华东理工大学.docx VIP
- 标准图集-04S531-4 湿陷性黄土地区给水阀门井.pdf VIP
- 二年级上册音乐教案第5课 欣赏《两颗星星》|花城版.docx VIP
- 《一例左胫骨平台外侧骨折的患者的护理研究》5200字.docx VIP
原创力文档


文档评论(0)