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
相关产品推荐
相关产品推荐

