修剪HashMap的有效方法

我正在用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++;
    }
}
    
已邀请:
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;
        }
    };
}
    
Guava的MapMaker在其最新版本(在主干上)有这个。它应该在r08,但我不知道什么时候会出现。
ConcurrentMap<Integer, Integer[]> seeds = new MapMaker()
     .maximumSize(maxSize)
     .makeMap();
请注意,这是一个线程安全的并发映射,看起来它可能很重要,具体取决于您使用它的方式。     
您是否考虑过使用缓存,例如EhCache?他们实现了地图,并且声明性地你可以设置大小,限制值存储在磁盘上等。     
数据库世界的一种可能性是拥有两个(或可能更多的地图)。查找使用两个地图。只写一个。当正在写入的容量达到容量时,替换/清除只读映射并切换。     

要回复问题请先登录注册