【发布时间】:2021-10-15 22:23:59
【问题描述】:
我打算使用Hashtable,但一些现有答案只说LinkedHashMap 保留插入顺序。所以,看来我可以通过entries 或keys 属性获得插入顺序。
我的问题是,当地图有 n 个元素时,如果我想删除前 n/2 个元素,有没有比循环遍历 keys 并反复调用 remove(key) 更好的方法?也就是这样的
val a = LinkedHashMap<Int, Int>();
val n = 10;
for(i in 1 .. n)
{
a[i] = i*10;
}
a.removeRange(0,n/2);
而不是
val a = LinkedHashMap<Int, Int>();
val n = 10;
for(i in 1 .. n)
{
a[i] = i*10;
}
var i = 0;
var keysToRemove= ArrayList<Int>();
for(k in a.keys)
{
if(i >= n/2)
break;
else
i++
keysToRemove.add(k);
}
for(k in keysToRemove)
{
a.remove(k);
}
这样做的目的是我将地图用作缓存,当缓存已满时,我想清除最旧的一半条目。只要可以,我就不必使用LinkedHashMap:
- 使用键高效查找值。
- 一次删除一系列条目。
【问题讨论】:
-
为什么不使用 LRUCache?它会自动清除最近最少使用的条目。那里有很多实现,所以你不需要编码。
标签: dictionary kotlin linkedhashmap