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

Dart如何限制Map键值对数量,超出时自动删除最早存入条目

Dart 固定容量自动淘汰Map实现方案

LinkedHashMap 默认按插入顺序保存键的顺序,刚好适配你要的「超出容量删除最早存入条目」的需求,只需要简单封装就能实现:

完整实现代码

首先导入dart:collection依赖,继承LinkedHashMap重写赋值逻辑即可:

import 'dart:collection';

class FifoMap<K, V> extends LinkedHashMap<K, V> {
  // 最大存储容量
  final int maxSize;

  FifoMap(this.maxSize);

  @override
  void operator []=(K key, V value) {
    // 先执行插入逻辑
    super[key] = value;
    // 容量超出时删除最早插入的第一条数据
    if (length > maxSize) {
      remove(firstKey);
    }
  }
}

你的业务场景用法

初始化时指定最大容量为100,后续正常插入键值对即可,无需手动处理淘汰逻辑:

// 初始化最多存100个键值对的Map
FifoMap<String, String> r = FifoMap(100);
// 正常插入键值对,超出100时自动删最早存入的条目
r[rId] = DateTime.now().toString();

可选拓展:LRU淘汰策略

如果你后续需要改成「删除最久未访问的条目」而非「最早插入的条目」,可以额外重写取值逻辑,把访问过的键移到队列末尾:

@override
V? operator [](Object? key) {
  if (key == null || !containsKey(key)) return null;
  // 取出当前值后删除原条目,重新插入到末尾变成最新条目
  final currentValue = super[key] as V;
  remove(key);
  super[key] = currentValue;
  return currentValue;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:06