javahashmap工作原理及实现-java开发java经验技巧

javahashmap工作原理及实现-java开发java经验技巧

ID:30776972

大小:390.15 KB

页数:15页

时间:2019-01-03

javahashmap工作原理及实现-java开发java经验技巧_第1页
javahashmap工作原理及实现-java开发java经验技巧_第2页
javahashmap工作原理及实现-java开发java经验技巧_第3页
javahashmap工作原理及实现-java开发java经验技巧_第4页
javahashmap工作原理及实现-java开发java经验技巧_第5页
资源描述:

《javahashmap工作原理及实现-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaHashMap211作原理及实现-编程开发技术JavaHashMap工作原理及头现原文出处:Yikun1.概述从本文你可以学习到:1.什么时候会使用HashMap?他冇什么特点?2.你知道HashMap的工作原理吗?3•你知道get和put的原理吗?equals。和hashCode()的都有什么作用?4.你知道hash的实现吗?为什么要这样实现?5.如果HashMap的大小超过了负载因/(loadfactor)/^义的容量,怎么办?当我们执行下面的操作吋:IlashMap^String,Integer>map=ne

2、wIlashMap();map.put(〃语文",1);map.put("数学〃,2);map.put("英语:3);map.put("历史〃,4);map.put(〃政治",5);map.put(〃地理",6);map.put("生物〃,7);map.put(〃化学〃,8);for(Eing,Integer>entry:Imap.enlrySelO){System,out.println(entry.getKey()+":+entry.getValue());}运行结果是治物史学学文语理政

3、生历数化语英地57428136发生了什么呢?下而是一个大致的结构,希望我们对HashMap的结构冇一个感性的认识:56:8•121311政治:5•生物:7・历史:4・——-数学:2•英语:3・±tfe®:6・0▲Omap▲entrySet▲keySetaloadfactor▲modCount▲size▲table“▲[0]ahasht>dkey▲nextt>▲valuet>▲[4]t>▲[6]"▲[10]dhasht>dkey▲▲nextdhasht>akey▲nextt>▲valuet>▲valuet>▲[11]>A[1

4、2]t>▲[13]▲threshold▲values在官方文档屮是这样描述HashMap的:Hashtablebased?implementationoftheMapinterface.Thisimplemenlationprovidesal1oftheoptionalmapoperations,andpermitsnullvaluesandthenullkey.(TheHashMapclassisroughlyequivalenttoHashtablc,exceptthatitis?unsynchronized?ancl

5、?permitsnulls.)Thisclassmakesnoguaranteesastotheorderofthemap;inparticular,itdoesnotguaranteethattheorderwil1remainconstantovertime.几个关键的信息:基于Map接口实现、允许null键/值、非同步、不保证冇序(比如插入的顺序)、也不保证序不随时间变化。2.两个重要的参数在HashMap中有两个很重要的参数,容量(Capacity)和负载因了(Loadfactor)•Initialcapacity

6、?Thecapacityis?thenumberofbuckets?inthehashtable,Theinitialcapacityissimplythecapacityatthetimethehashtableiscreated・•Loadfactor?Theloadfactoris?ameasureofhowfullthehashtableisallowedtoget?beforeitscapacityisautomaticallyincreased.简单的说,Capacity就是bucket的大小,Loadfact

7、or就是bucket填满程度的最大比例。如果对迭代性能要求很高的话不要把capacity设置过大,也不要把loadfactor设置过小。当bucket中的entries的数目大于capacity*loadfactor时就需要调整bucket的大小为当前的2倍。3.put函数的实现put函数大致的思路为:1.对key的hashCodc()做hash,然后再计算index;2.如果没碰撞直接放到bucket里;3.如果碰撞了,以链表的形式存在buckets后;4.如果碰撞导致链表过长(大于等于TREEIFY.THRESHOLD

8、),就把链表转换成红黑树;5.如果节点己经存在就替换oldvalue(保证key的唯一性)6.如果bucket满了(超过loadfactor*currentcapacity),就耍resizeo具体代码的实现如下:publicVput(Kkey,Vvalue)〃对key的hashCode()做hashr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。