LRU缓存机制 题目描述:运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回1。voidput(intkey,intvalue)如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组关键字值。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在O(1)时间复杂度内完成这两种操作? 示例说明请见LeetCode官网。 来源:力扣(LeetCode) 链接:https:leetcodecn。comproblemslrucache 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解法一:LinkedHashMap 因为允许使用已有的数据结构,LinkedHashMap就支持,所以直接继承LinkedHashMap即可,当然这是偷懒的做法,如果了解LinkedHashMap的实现的话,照着实现就可以了。importjava。util。LinkedHashMap;importjava。util。Map;publicclassLeetCode146{publicstaticvoidmain(String〔〕args){测试用例LRUCachelRUCachenewLRUCache(2);lRUCache。put(1,1);缓存是{11}lRUCache。put(2,2);缓存是{11,22}lRUCache。get(1);返回1lRUCache。put(3,3);该操作会使得关键字2作废,缓存是{11,33}lRUCache。get(2);返回1(未找到)lRUCache。put(4,4);该操作会使得关键字1作废,缓存是{44,33}lRUCache。get(1);返回1(未找到)lRUCache。get(3);返回3lRUCache。get(4);返回4}}classLRUCacheextendsLinkedHashMapInteger,Integer{privateintcapacity;publicLRUCache(intcapacity){super(capacity,0。75F,true);this。capacitycapacity;}publicintget(intkey){returnsuper。getOrDefault(key,1);}publicvoidput(intkey,intvalue){super。put(key,value);}移除最久未使用的数据的条件:当缓存容量达到上线parameldestreturnOverrideprotectedbooleanremoveEldestEntry(Map。EntryInteger,Integereldest){returnsize()capacity;}} 【每日寄语】也许奋斗了一辈子的屌丝也只是个屌丝,也许咸鱼翻身了不过是一个翻了面的咸鱼,但至少我们有做梦的自尊,而不是丢下一句‘努力无用’心安理得地生活下去。