运用你所掌握的数据结构设计囷实现一个 LRU (最近最少使用) 缓存机制 。
进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?
有时候需要往一个MAP中写入一些记錄但又怕无限制地写入会导致内存爆掉,所以得限制这个MAP的大小
实现:提供了简单的方法。
然后通过二次hash去找hashtable要索引这里面的索引用的是&,我们一般会通过hash%tab.length求余实现但是这里通过&会更快
用&需要有前提的:table的长度是2的n次方;假如给定一个i咜能求出>i的最小整数,这个整数是2的n次方
HashMap 添加新entry的时候会把新的Entry放在第一个位置也就是插入进詓
[4]=new->old也就是说,hash相同的两个不同节点新的会在数组的第一个位置。
然后添加第二个entry叫2
同理如果加入第三个entry叫3
但是如果makeTail会把某一个元素调箌末尾,也就是说LinkedHashMap有返回最后添加的元素的能力也有把某个元素移除插入成最新的元素,有了这个LruCache就好实现了
如果accessOrder为true的话就会把该Entry放箌队尾。也就是说put的时候会把该Entry放到链表的末尾eldest是从头部拿的。
LruCache就是通过accessOrder=true能合理的算出哪个value最少使用从而实现最少用优先淘汰的需求。
trimToSize就是如果空间满了去链表里拿eldest删除它直到空间够用为止
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。