有没有一种技术可以指定一个数字n,这样当插入第(n + 1)个条目时,最旧的条目会被首先删除,以确保哈希表的大小始终限制为n?
有没有一种技术可以指定一个数字n,这样当插入第(n + 1)个条目时,最旧的条目会被首先删除,以确保哈希表的大小始终限制为n?
LinkedHashMap 正好可以做到这一点,详见removeEldestEntry 方法的 Java 文档。
像下面这样做就可以了,这将删除最早插入的条目:
Map map = new LinkedHashMap() {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
您也可以在构造函数中指定要删除的最早访问条目:
Map map = new LinkedHashMap(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
也许你正在寻找一个LRU缓存?这里有一篇关于基于LinkedHashMap的博客文章。