【发布时间】:2013-06-04 01:12:13
【问题描述】:
我需要一个HashMap 或简单的Map 与固定数量的元素 (n) 像 FIFO 队列一样工作。
因此,直到元素编号为 n 之前,只需将新元素放入地图中。
对于元素编号> n,第一个插入的元素被删除,最新的元素被放入地图中。
Java中是否有类似的东西,还是我必须实现它?
【问题讨论】:
标签: java collections map queue fifo
我需要一个HashMap 或简单的Map 与固定数量的元素 (n) 像 FIFO 队列一样工作。
因此,直到元素编号为 n 之前,只需将新元素放入地图中。
对于元素编号> n,第一个插入的元素被删除,最新的元素被放入地图中。
Java中是否有类似的东西,还是我必须实现它?
【问题讨论】:
标签: java collections map queue fifo
您可以使用LinkedHashMap 执行此操作,如下所示:
new LinkedHashMap<K, V>(n) {
@Override protected boolean removeEldestEntry(Entry<K, V> entry) {
return size() > n;
}
};
【讨论】:
正如我在旁边,Java 冗长是其 最佳 功能... 以下对我有用:
public class FifoMap extends LinkedHashMap<String, String> {
int max;
/**
*
*/
private static final long serialVersionUID = 1L;
public FifoMap (int max){
super(max + 1);
this.max = max;
}
@Override
public String put (String key, String value) {
String forReturn = super.put(key, value);
if (super.size() > max){
removeEldest();
}
return forReturn;
}
private void removeEldest() {
Iterator <String> iterator = this.keySet().iterator();
if (iterator.hasNext()){
this.remove(iterator.next());
}
}
}
它也适用于似乎与 Entry 类有问题的 Google App Engine。
【讨论】: