LFU缓存淘汰算法(淘汰使用次数最少)
LFU算法相当于把数据按照访问频次进行排序,如果多个数据拥有相同的访问频次,就应删除最早的插入的那个数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。
static class LFUCache{
//构造容量为capacity的缓存
public LFUCache(int capacity){
}
//在缓存中查询key
public int get(int key){
}
//将key和val存入缓存
public void put(int key,int val){
}
}
- 调用get(key)方法时,要返回该key对应的val
- 只要用get或者put方法访问一次某个key,该key的freq就要加1
- 如果在容量满了的时候进行插入,则需要将freq最小的key删除,如果最小的freq对应多个key,则删除其中最旧的那个。
package labuladong_learn.Data_structure;/**
* Copyright (C), 2019-2021
* author candy_chen
* date 2021/4/10 9:36
*
* @Classname LFU
* Description: LFU 淘汰那些使用次数最少的数据
*/
import java.util.HashMap;
import java.util.LinkedHashSet;
/**
*
*/
public class LFU {
static class LFUCache{
//key到val的映射,后面称为KV表
HashMap<Integer,Integer> keyToVal;
//key到freq的映射,后面称为KF表
HashMap<Integer,Integer>keyToFreq;
//freq到key列表的映射,后面称为FK表
HashMap<Integer, LinkedHashSet<Integer>> freqToKeys;
//记录最小的频次
int minFreq;