You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Kotlin实现的LFU缓存代码求专业点评与优化建议

Kotlin实现LFU缓存求点评与优化建议

我是一名学生,最近在研究经典的LFU(Least Frequently Used,最少使用)缓存问题,觉得网上的算法实现很难复刻,于是从零开始用Kotlin写了一个可正常运行的LFU缓存版本。希望有经验的开发者能帮忙点评这个实现和标准方案的差距,并给出优化建议。

实现代码

class LFUCache(private val capacity: Int) {
    private val cache = mutableMapOf<Int, Pair<Int, Int>>() // key to (value, frequency)
    private val frequencyMap = mutableMapOf<Int, MutableSet<Int>>() // frequency to keys
    private var minFrequency = 1

    fun get(key: Int): Int {
        val (value, freq) = cache[key] ?: return -1
        // Update frequency
        frequencyMap[freq]?.remove(key)
        if (frequencyMap[freq].isNullOrEmpty()) {
            frequencyMap.remove(freq)
            if (minFrequency == freq) {
                minFrequency++
            }
        }
        val newFreq = freq + 1
        cache[key] = value to newFreq
        frequencyMap.computeIfAbsent(newFreq) { mutableSetOf() }.add(key)
        return value
    }

    fun put(key: Int, value: Int) {
        if (capacity == 0) return
        if (cache.containsKey(key)) {
            // Update existing key's value and frequency
            cache[key] = value to cache[key]!!.second
            get(key) // Reuse get logic to update frequency
            return
        }
        // Evict if capacity reached
        if (cache.size >= capacity) {
            val keyToEvict = frequencyMap[minFrequency]?.first() ?: return
            frequencyMap[minFrequency]?.remove(keyToEvict)
            if (frequencyMap[minFrequency].isNullOrEmpty()) {
                frequencyMap.remove(minFrequency)
            }
            cache.remove(keyToEvict)
        }
        // Add new key
        cache[key] = value to 1
        frequencyMap.computeIfAbsent(1) { mutableSetOf() }.add(key)
        minFrequency = 1
    }
}

核心疑问

  • 该实现和标准LFU缓存方案的主要差距在哪里?
  • 从性能优化、代码结构、边界场景处理等角度,有哪些具体的改进建议?

内容的提问来源于stack exchange,提问作者NicolaM94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:12:14