用超时创建HashMap.Will Guava缓存工作?

use*_*993 2 java servlets map guava

这是我的HashMap.

Map<String,MyObject> mymap=new HashMap<String,MyObject>();
Run Code Online (Sandbox Code Playgroud)

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

它与谷歌番石榴相似吗?如果是,请举个例子.据我读到番石榴doenot支持.

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

编辑:每当我收到用户的GET请求时,我创建myobject并将其存储在map.And如果我从具有相同Key的用户那里得到另一个请求,我从用户那里获取存储的对象,做一些操作并再次存储回来了.

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

Kei*_*ith 5

请参阅guava的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"));

}
Run Code Online (Sandbox Code Playgroud)