17

我需要 aHashMap或 simpy aMap具有固定数量的元素(n)像FIFO队列一样工作。

因此,直到元素编号 <= n之前,只需将新元素放入地图中。

对于元素编号 > n,第一个插入的元素被删除,最新的元素被放入地图中。

Java中有类似的东西,还是我必须实现它?

4

2 回答 2

35

您可以LinkedHashMap按以下方式执行此操作:

new LinkedHashMap<K, V>(n) {
  @Override protected boolean removeEldestEntry(Entry<K, V> entry) {
    return size() > n;
  }
};
于 2013-06-07T16:38:54.310 回答
3

当我站在一边时,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。

于 2016-04-11T14:37:46.027 回答