修剪HashMap的有效方法

Nix*_*Nix 1 java hashmap pruning

我正在用Java创建一个Flyweight,我想确保我不会创建太大的地图.是否有更有效的方法来修剪地图?我没有看到任何可以自动执行此操作的属性(如max size构造函数),所以我在代码中执行此操作.

这是我拥有的,非常基本的,但我想确保没有更好的方法:

private static void prune() {
    Iterator<Entry<Integer, Integer[]>> iterator =  seeds.entrySet().iterator();
    int removed = 0;
    while(iterator.hasNext()|| removed == pruneLength) {
        iterator.next();
        iterator.remove();
        removed++;
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 5

LinkedHashMap可以用作LRU缓存.

Map<Integer, Integer[]> map = createLRUMap(128);

public static <K, V> Map<K, V> createLRUMap(final int maxSize) {
    return new LinkedHashMap<K,V>(maxSize, 1, true) {
        @Override
        protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
            return size() > maxSize;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)