如何在达到限制时删除最旧的条目来限制Map的最大大小

mat*_*rns 27 java collections caching map

我想要一个具有最大大小的Map的实现.我想将它用作缓存,因此一旦达到限制就会删除最旧的条目.

我也不想引入任何第三方库的依赖.

Pet*_*rey 65

您可以像这样使用LinkedHashMap

您可以通过LRU或FIFO删除.

public static <K, V> Map<K, V> createLRUMap(final int maxEntries) {
    return new LinkedHashMap<K, V>(maxEntries*10/7, 0.7f, true) {
        @Override
        protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
            return size() > maxEntries;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 这很完美,我不知道LinkedHashMap的这个功能.谢谢! (3认同)
  • 使用WeakHashMap作为缓存有两个问题.1)它的大小没有上限2)它可以一次全部清除,它对GC清除多少没有限制. (2认同)
  • @WaleryStrauch 顺便说一句,HashMap 实际上总是具有 2 的幂的容量,即它向上舍入为 2 的幂 (2认同)