游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

分析java。util。LinkedHashMap

  介绍
  该实现与HashMap不同的是它维护一个双向链表,可以使HashMap有序。与HashMap一样,该类不安全。结构
  和HashMap的结构非常相似,只不过LinkedHashMap是一个双向链表
  LinkedHashMap分为两种节点Entry和TreeNode节点
  Entry节点结构:classEntryK,VextendsHashMap。NodeK,V{EntryK,Vbefore,after;Entry(inthash,Kkey,Vvalue,NodeK,Vnext){super(hash,key,value,next);}}
  before和after是双向链表中的前继和后继节点
  TreeNode节点和HashMap中的一样
  从这里能看出LinkedHashMap是一个双向链表
  LinkedHashMap有如下属性:transientLinkedHashMap。EntryK,Vhead;transientLinkedHashMap。EntryK,Vtail;finalbooleanaccessOrder;
  head和tail很好理解就是双向链表的头和尾
  HashMap中没有accessOrder这个字段,这也是与HashMap最不同的地方,该类有两种取值分别代表不同的意思:true,按照访问顺序排序false,按照插入顺序排序HashMap预留的一些方法
  HashMap预留了一些方法提供给LinkedHashMap使用LinkedHashMap重写了以下四个方法来保证双向队列能够正常工作创建一个Node节点NodeK,VnewNode(inthash,Kkey,Vvalue,NodeK,Vnext){。。。}创建树节点TreeNodeK,VnewTreeNode(inthash,Kkey,Vvalue,NodeK,Vnext){。。。}树节点和普通节点相互转换NodeK,VreplacementNode(NodeK,Vp,NodeK,Vnext){。。。}TreeNodeK,VreplacementTreeNode(NodeK,Vp,NodeK,Vnext){。。。}HashMap未实现,留给LinkedHashMap实现后置处理访问节点后如何处理voidafterNodeAccess(NodeK,Vp){}插入节点后如何处理voidafterNodeInsertion(booleanevict){}移除节点后如何处理voidafterNodeRemoval(NodeK,Vp){}
  afterNodeAccess、afterNodeInsertion、afterNodeRemoval这三个方法保证了LinkedHashMap有序,分别会在get、put、remove后调用
  put和remove都对顺序没有影响,因为在操作的时候已经调整好了(put放在)。但是get是对顺序有影响的(被访问到了),所以需要重写该方法:publicVget(Objectkey){NodeK,Ve;获取节点if((egetNode(hash(key),key))null)returnnull;改变顺序if(accessOrder)afterNodeAccess(e);returne。value;}
  通过afterNodeAccess来改变该节点(P)的顺序,该方法分为一下几步:拆除需要移动的节点P处理前置节点,前置节点有两种情况前置节点为空,表示P为头节点前置节点不为空,表示P为中间节点处理后置节点后置节点为空,表示P为尾节点后置节点不为空,表示P为中间节点将该节点移动到tail处voidafterNodeAccess(NodeK,Ve){movenodetolastLinkedHashMap。EntryK,Vlast;if(accessOrder(lasttail)!e){LinkedHashMap。EntryK,Vp(LinkedHashMap。EntryK,V)e,bp。before,ap。after;p。afternull;if(bnull)heada;elseb。aftera;if(a!null)a。beforeb;elselastb;if(lastnull)headp;else{p。beforelast;last。afterp;}tailp;modCount;}}
  afterNodeInsertion则在putVal中调用
  基本逻辑是如果参数为true则尝试删除头节点,但是还需要满足头节点是最老的,具体的与removeEldestEntry配合使用,可以继承LinkedHashMap并定制,LinkedHashMap是恒为false的。protectedbooleanremoveEldestEntry(Map。EntryK,Veldest){returnfalse;}
  如果所有条件都满足则删除头节点voidafterNodeInsertion(booleanevict){possiblyremoveeldestLinkedHashMap。EntryK,Vfirst;if(evict(firsthead)!nullremoveEldestEntry(first)){Kkeyfirst。key;removeNode(hash(key),key,null,false,true);}}
  afterNodeRemoval则在removeNode成功删除节点之后调用:
  用来保证在双向链表中删除一个节点仍然能够使结构不被破坏
  为被删除节点的头和尾节点建立联系:voidafterNodeRemoval(NodeK,Ve){unlinkLinkedHashMap。EntryK,Vp(LinkedHashMap。EntryK,V)e,bp。before,ap。after;p。beforep。afternull;if(bnull)heada;elseb。aftera;if(anull)tailb;elsea。beforeb;}应用实现LRU
  LRU是一种缓存置换机制,LRU(LeastRecentlyUsed)将最近最少使用的内容替换掉。实现非常简单,每次访问某个元素,就将这个元素浮动到栈顶。这样最靠近栈顶的页面就是最近经常访问的,而被压在栈底的就是最近最少使用的,只需要删除栈底的元素。
  LinkedHashMap非常方便实现LRU,LinkedHashMap在put操作时同时会判断是否需要删除最老的元素。只需要重写removeEldestEntry方法,使得超过容量就删除最老的元素。
  下面是具体实现:publicclassLRUK,VextendsLinkedHashMapK,V{最大容量pNote:用位运算就不需要将十进制转换为二进制,直接就为二进制。privatefinalintMAXCAPACITY130;缓存的容量privateintcapacity;publicLRU(intcapacity){this(true,capacity);}publicLRU(booleanaccessOrder,intcapacity){this(14,0。75f,accessOrder,capacity);}publicLRU(intinitialCapacity,floatloadFactor,booleanaccessOrder,intcapacity){super(initialCapacity,loadFactor,accessOrder);this。capacitycapacity;}}
  测试:LRUInteger,IntegerlrunewLRUInteger,Integer(10);for(inti0;i10;i){lru。put(i,ii);System。out。println(put:(i,ii));intrandomKey(int)(Math。random()i);System。out。println(getrandomKey:lru。get(randomKey));System。out。println(headlrutail);}
  结果:put:(0,0)get0:0head{00}tailput:(1,1)get0:0head{11,00}tailput:(2,4)get1:1head{00,24,11}tail
  喜欢的朋友点赞,转发加关注。

国军少将起义后见毛主席,总理给他5分钟,主席不舍,给他10分国家和民族大义面前,个人的利益和追求,都是渺小的。面对外敌入侵时,有无数热血的中华儿女,毅然放弃安逸的生活,投身到革命军队中,参与革命斗争。原是一名老师的陈锐霆,在外敌入……3217字母哥无解表现取赛点!水花兄弟空砍65分!太阳陷入苦再次大胜公牛,雄鹿3:1豪取赛点!库里替补空砍37分,掘金扳回一城避免横扫!保罗低迷仅得4分,鹈鹕轻取太阳扳平总比分!再次大胜公牛!雄鹿豪取赛点在上一场比赛里,坐镇主场的……B站独代横山克配乐!光隙解语异世界策略攻防手游预约近日,由bilibili独家代理发行的异世界策略攻防手游《光隙解语》开启预约。在这款中世纪奇幻风的游戏里,玩家将化身希望的灯火,与语者在百变战场正面迎敌,以降临技大招逆转……印度的阶层等级是怎样的,是如何分化的?说起印度,那么肯定就要谈到英国,就像是印度的脸上已经深深地烙着英国的符号。英国统治印度最值得书写的就是印度次大陆首次实现了政治统一。印度的史学家潘尼迦说过:英国最为出色的统治就……身边的机遇在19世纪50年代,加利福尼亚州发现了金矿,引发了一场世界性的淘金热朝,很多人不远万里来到这里淘金。年轻的犹太人列瓦伊施特劳斯听说淘金的事情后,也急匆匆赶往加州。可是当他……三国杀冷知识,最能卖血的是蜀国,最会玩装备的是魏国三国杀移动版,众所周知,三国杀移动版中不同的势力武将各有各的特点。魏国武将主要是卖血,吴国武将主要是玩装备,蜀国武将主要是爆发。然而,你不知道的是在卖血、装备和爆发三个类型中,……浅谈真宗时代的落幕寇准和李迪等人,在与刘娥、丁谓间的政斗失败后,遭到了残酷的打击,丁谓自诩完全掌握了朝政,却有一人暗中布置起了反抗丁谓的计划。天禧四年闰十二月,王曾找到了遏制丁谓的突破口,……自由之刃全方面攻略魂环归类:10年到10w年之间魂环价目表:十年魂环,灵符18000千年魂环,灵符198000十万年魂环,灵符1000000百万年魂环,灵符1500……仓央嘉措被押解进京的途中,死在青海湖边,他的死因是什么仓央嘉措是最具传奇特色的达赖喇嘛,他为僧人,却向往自由,他为王者,却羡慕平凡。自从被选为达赖喇嘛之后,他失去了自我,变成了任人宰割的傀儡,他不甘于被控制,便化身平民享受黑夜的自……从世袭制疆域范围,来看夏王朝的建立公元前21世纪,夏王朝建立,都城阳城,通过漫长的治水活动形成,并且在治水活动中建立巩固的国家系统。夏王朝是中国历史上第一个国家政权,其身上有深刻的治水活动留下的痕迹,并深……燕将军乐毅伐齐70余城的前因后果燕王哙屠戮大臣、鱼肉百姓,齐王派大将章子带兵攻打燕国都城,燕国士兵打开城门投降,百姓箪食壶浆以迎王师,章子将燕王哙和丞相杀死,燕国百姓拍手称快。齐王问孟子接下来怎么做,孟……顶级名媛张艾嘉的江湖往事,她活成了所有女人想要的模样在当今的娱乐圈里有这样一位传奇女性,她活得肆意勇敢,气质却如同一朵馥郁芬芳的百合花,高洁而优雅。她是罗大佑爱情里的小妹,让李宗盛知道什么是爱的代价。黄霑评价她是才子的教母……
2022年各大品牌口红广告语你喜欢哪一个纪梵希一生只做一件事,一生只爱一个人,别说时间不值得,你最值得我爱你,你随意迪奥(DIOR)我目光短浅,眼里只有你,我有两个心愿,你在身边,……一加AcePro用户如何看待一加新机?料足,期待上手玩吃鸡最近网络上关于一加手机品牌的讨论很是热烈,让我这个一加老用户也十分期待一加接下来要推出的一加11手机了。因为一加11会标配12256GB大存储配置,我此前会入手一加AcePro……赌场水鱼冠军与仗义执言的媒体人前世界冠军张继科,当红美女明星景甜,含冤入狱的债主S先生,仗义执言的媒体人李微敖,每一项都吸引足了吃瓜群众的眼球。这瓜保熟吗?至少从目前看熟透了。先梳理一下各方关系……我们只顾看华为和小米了,没发现OPPO和中兴才是扫地僧小米和华为这对友商对头,一个让人心疼,一个让人心忧。心疼华为被打压,心忧小米没有核心技术,怕万一被别人收拾,必然是死路一条。不过看了近五年的专利发明排行,我们对这两……有研究称,花生会加速癌细胞扩散,是真的吗?花生究竟怎么吃?大家平时喜欢吃坚果类食物吗?相信很多朋友都喜欢在家里备上坚果,一方面,亲朋好友来做客的时候,可以拿出来招待,边吃边聊,拉近距离,另一方面,自己一个人看书刷剧的时候,也可以……1955年,上将名单中王建安因骄傲自满被去除,这是为什么?1955年新中国开始建国后的第一次全体授衔共分元帅,大将,上将,中将及少将五等军衔,用以表彰在新中国建立过程中抛洒热血的功勋良将。但是就在授衔前毛主席看着名单中的一人对其……有人说,在空中看到了大气层生物,是真的吗?1961年,一名记者驱车来到海边,拍下一张奇怪的照片,可是相机不小心被损坏。技术人员通过修复,看到里面的照片时,拿着相机的手微微颤抖,都不敢相信自己的眼睛。曾经就有科学家……今秋赏菊必去这五大展区!2022北京菊花文化节开幕秋风送爽,金菊怒放,今天(9月23日),2022年北京菊花文化节正式开幕,全市共打造菊花观赏面积近15万平方米,布置精品菊花3万多盆,在世界花卉大观园、北海公园、北京国际鲜花港……14年奥运冠军陈玘退役,后二婚娶90后妻子,儿女同父异母生活杀神的外号,最初其实是来自于我的qq网名。陈玘在一次采访中,如此说道。没人想得到,这个如此贴合奥运冠军陈玘的形象的外号,居然是出自网名。众所周知,陈玘的球风果断狠厉……蒋介石派100多架飞机空袭大陆,毛主席派聂凤智出战,大获全胜1958年,新中国遇到了前所未有的困难,外交方面与苏联交恶,国民经济方面又遭遇自然灾害,出现了大范围的饥荒。在这个严峻的时刻,退守孤岛的蒋介石似乎看到了千载难逢的机会,派……晚清上色老照片有叼着烟袋洗衣的小妾,有扛着妓女去工作的龟公在清末的时候,西方的拍照技术已经传入我国,在那个时候有很多的人用手中的照相机拍下了大量反映普通民众生活的照片,让我们有机会在100多年后的今天能够看到当时人们的生活状态。……想戒烟的人,应该立即戒掉还是循序渐进?听听医生怎么说相信大多数人应该都听说过吸烟有害健康的说法,烟草经过充分燃烧之后,会释放出上千种有害物质,经常吸烟,其中的一些尼古丁,焦油一氧化碳等特殊成分,就会沉淀在人的肺部,影响到肺脏功能……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网