2

这是我的哈希图。

Map<String,MyObject> mymap=new HashMap<String,MyObject>();

我想执行像 get 和 put 这样的正常操作,我还想要一个操作,即当对象超过一定时间没有被访问时,地图会自动删除一个对象

它与谷歌番石榴相似吗?如果是,请举个例子。据我所知,番石榴不支持放。

如果没有,有没有办法做到这一点?

编辑:每当我从用户那里收到 GET 请求时,我都会创建我的对象并将其存储在地图中。如果我从具有相同密钥的用户那里收到另一个请求,我会从用户那里获取存储的对象,执行一些操作并再次存储回来了。

如果键是新键,则映射应返回 null

4

1 回答 1

5

请参阅番石榴的 CacheBuilder 上的 javadoc(它包含示例):

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

还有这个:https ://code.google.com/p/guava-libraries/wiki/CachesExplained

更新:不需要使用缓存加载器,也不需要加载方法。此测试用例通过:

@Test
public void testManualInsertion() {

    Cache<String, String> cache = CacheBuilder.newBuilder()
            .maximumSize(1000)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .removalListener(new MyRemovalListener())
            .concurrencyLevel(4)
            .recordStats()
            .build();


    cache.put("someKey", "someValue");

    assertEquals("someValue", cache.getIfPresent("someKey"));

}
于 2013-09-01T17:44:24.517 回答