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

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

ID:30778752

大小:133.00 KB

页数:6页

时间:2019-01-03

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

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

1、JavaLinkcdHashMapI作原理及实现-编程开发技术JavaLinkedHashMap工作原理及实现原文出处:Yikun1.概述在理解了#7介绍的HashMap后,我们来学习LinkedHashMap的丁•作原理及实现。首先还是类似的,我们写一个简单的LinkedHashMap的程序:LinkedHashMaplmap二newLinkedHashMap();lmap.put("语文",1);lmap.put(〃数学",2);lmap.p

2、ut("英语〃,3);lmap.put(〃历史〃,4);lmap.put(〃政治〃,5);lmap.put(〃地理",6);lmap.put("生物",7);lmap.put("化学〃,8);for(Entry〈String,Integer>entry:lmap.entrySetO){System.out.println(entry.getKey()+〃:+entry.getValue());}运行结果是:12345678我们可以观察到,和HashMap的运行结果不同,LinkedHashMap的迭代输出的结

3、果保持了插入顺序。是什么样的结构使得LinkedHashMap具冇如此特性呢?我们述是一样的看看LinkedHashMap的内部结构,对它冇一个感性的认识:政治:5生物:7历史:4数学:2语文:1英语:3地理:605610111213化学:8beforerl—ifaccessOrder▲entrySet▲▲head>▲after▲before/hash0key▲nextt>▲value▲keySetdloadFactor▲modCount▲size>▲table▲tail▲threshold▲values语文

4、数学=2丿英没错,正如官方文档所说:Hashtable?and?linkedlist?implementationoftheMapinterface,withpredictableiterationorder.ThisimplementationdiffersfromIlashMapinthatitmaintainsa?doubly-linkedlistrunningthroughallofitsentries.Thislinkedlistdefinestheiterationordering,whichis

5、normallytheorderinwhichkeyswereinsertedintothemap(insertion-order).LinkedHashMap是Hash表和链表的实现,并且依靠着双向链表保证了迭代顺序是插入的顺序。1.三个重点实现的函数在HashMap中提到了下面的定义://CallbackstoallowLinkedHashMappost-actionsvoidafterNodeAccess(Nodep){}voidafterNodeInsertion(boolcancvict)

6、{}voidafterNodeRemoval(Nodep){}LinkedHashMap继承于HashMap,因此也重新实现了这3个函数,顾名思义这三个函数的作用分别是:节点访问后、节点插入后、节点移除后做一些事情。afterNodeAccess函数voidafterNodeAccess(Nodec){//movenodetolastLinkedHashMap.Entrylast;//如果定义了accessOrder,那么就保证最近访问节点放到最后if(accessOrder&&

7、(last二tail)!二e){LinkedHashMap.Entryp=(LinkcdllashMap.Entry〈K,V>)c,b二p.before,a二p.after;p.after=null;if(b==null)head=a;elseb.after二a;if(a!=null)a.before=b;elselast二b;if(last==null)head=p;else{p.before=last;last,after二p;}tail二p;++modCount;}}就是说在进行put之后就算

8、是对节点的访问了,那么这个时候就会更新链表,把最近访问的放到最后,保证链表。afterNodeinsertion函数voidafterNodeinsertion(booleanevict){//possiblyremoveeldestLinkedHashMap.Entryfirst;//如果定义了移除规则,则执行相应的溢出if(evict&&(first二head)!二nul1&&remo

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

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

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