这个是最近最少使用算法,把不常用的数据都清除掉。
使用什么数据结构查找?
那当然是hashmap(O(1)以内的读写)和Linkedlist(快速的增加删除)
List的节点值,作为Hashmap的value进行存储。
新的数据都在链表尾部,老的数据都在头部。
操作也就是查找的更新:
查找分为找到和找不到。找不到的话,返回空即可。找到的话,返回值的同时,将数据移到尾部(删除该节点,并在尾部插入)
更新分为找到和找不到。找到的话,直接更新value,移到尾部。 找不到的话,如果缓存的数量没达到限制,在尾部直接加一个新值,如果到达限制了,删除表头的第一个值和Hashmap里的key(根据list删除hashmap的反向删除,所以list里也需要存储key),然后在尾部加一个新值。
拓展:Hashmap加LinkedList,这不就是LinkedHashmap吗?
如下图,几行代码搞定。
参考文献:https://zhuanlan.zhihu.com/p/265597517
https://www.jianshu.com/p/93e545e877de