【问题标题】:FIFO Map with limited elements有限元素的 FIFO 映射
【发布时间】:2013-06-04 01:12:13
【问题描述】:

我需要一个HashMap 或简单的Map 与固定数量的元素 (n) 像 FIFO 队列一样工作。

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

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

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

【问题讨论】:

    标签: java collections map queue fifo


    【解决方案1】:

    您可以使用LinkedHashMap 执行此操作,如下所示:

    new LinkedHashMap<K, V>(n) {
      @Override protected boolean removeEldestEntry(Entry<K, V> entry) {
        return size() > n;
      }
    };
    

    【讨论】:

    • 这是一种删除最旧条目的好方法,无需对类 LinkedHashMap 进行子类化。
    • @TheOriginalAndroid,嗯?你绝对是 LinkedHashMap 的子类化。
    • @fuyou001:.不。没有任何内置的东西可以是线程安全的,并且可以通过驱逐进行 FIFO。
    【解决方案2】:

    正如我在旁边,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。

    【讨论】:

    • 这个答案为我做了。大人物@yurin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多