如何在Java树映射中设置最大大小?

如何在Java树映射中设置最大大小?,java,treemap,Java,Treemap,我正在使用Java中的树映射构建一个最近使用最少的缓存。我选择TreeMap的原因是因为TreeMap.floorEntry(String)方法。 我希望能够为缓存指定最大大小(TreeMap)。 然后我想使用LRU驱逐机制,因此, 当缓存已达到最大大小且有新记录要缓存时, 我希望缓存添加新记录,并删除最旧的条目 我希望我正确理解了你的问题。 我将使用ConcurrentSkipListMap(它也有FloorRentry方法)并实现我自己的小最大大小控制 这就是我要做的: int maxSiz

我正在使用Java中的树映射构建一个最近使用最少的缓存。我选择TreeMap的原因是因为TreeMap.floorEntry(String)方法。 我希望能够为缓存指定最大大小(TreeMap)。 然后我想使用LRU驱逐机制,因此, 当缓存已达到最大大小且有新记录要缓存时,
我希望缓存添加新记录,并删除最旧的条目

我希望我正确理解了你的问题。 我将使用ConcurrentSkipListMap(它也有FloorRentry方法)并实现我自己的小最大大小控制

这就是我要做的:

int maxSize = 100;
ConcurrentSkipListMap<String, String> cache = new ConcurrentSkipListMap<>();

// Check if max size is reached before inserting something in it. Make some room for new entry.
while (cache.size() >= maxSize) {
    cache.pollFirstEntry();
}
int maxSize=100;
ConcurrentSkipListMap缓存=新建ConcurrentSkipListMap();
//在插入内容之前,请检查是否达到最大大小。给新进来的人留出一些空间。
while(cache.size()>=maxSize){
cache.pollFirstEntry();
}

这有点老套,但应该可以完成这项工作。

没有最大大小(除了
集合的最大大小,即
Integer.MAX_VALUE=2^31-1
)。嗨,安迪,谢谢你的评论。我使用LinkedHashMap做了类似的事情。它如何选择第一个条目?是基于钥匙还是第一次添加的条目?@Manos好的,我明白了。上面的代码并不完全符合您的期望。你能告诉我你存储的密钥是什么,以及你的地图中的值是什么吗?请举个例子好吗?信息太少,无法处理…键是一个字符串,String.compareTo()可用于比较。为了解决这个问题,如果缓存达到maxSize,我将从映射中删除一个随机条目,然后插入。