相关疑难解决方法(0)

在java中使用简单易用的LRU缓存

我知道实现起来很简单,但我想重用已经存在的东西.

我想解决的问题是我为不同的页面,角色加载配置(来自XML,所以我想缓存它们)......所以输入的组合可以增长很多(但99%不会).要处理这个1%,我希望在缓存中有一些最大数量的项目...

直到知道我在apache commons中找到了org.apache.commons.collections.map.LRUMap它看起来很好但是想要检查别的东西.有什么建议?

java caching lru

63
推荐指数
3
解决办法
6万
查看次数

什么是数据结构类似哈希表,但不常使用的键被删除?

我正在寻找一个类似于哈希表的数据结构,但表中有一个大小限制.当散列中的项数达到大小限制时,应调用剔除函数以消除表中检索次数最少的键/值对.

这是我正在研究的一些伪代码:

class MyClass {
  private Map<Integer, Integer> cache = new HashMap<Integer, Integer>();
  public int myFunc(int n) {
    if(cache.containsKey(n))
      return cache.get(n);
    int next = . . . ; //some complicated math.  guaranteed next != n.
    int ret = 1 + myFunc(next);
    cache.put(n, ret);
    return ret;
  }
}
Run Code Online (Sandbox Code Playgroud)

什么情况是,有一些价值n的,其myFunc()将被称为很多次,但许多其他值n将只计算一次.因此,缓存可以填满数百万个永远不需要的值.我想有一种方法让缓存自动删除不经常检索的元素.

这感觉就像一个必须解决的问题,但我不确定数据结构是什么,我将用它来有效地做到这一点.谁能指出我正确的方向?


更新我知道这必须是一个已经解决的问题.它被称为LRU Cache,通过扩展LinkedHashMap类很容易实现.以下是包含该解决方案的代码:

class MyClass {
  private final static int SIZE_LIMIT = 1000;
  private Map<Integer, Integer> cache =
    new LinkedHashMap<Integer, Integer>(16, 0.75f, true) {
      protected …
Run Code Online (Sandbox Code Playgroud)

java algorithm caching data-structures

11
推荐指数
1
解决办法
1719
查看次数

如何限制java哈希表中的条目数?

是否有一种技术可以指定一个数字n,这样当插入第(n + 1)个条目时,首先删除最旧的条目,确保哈希表的大小始终限制为n?

java hashtable

9
推荐指数
2
解决办法
5828
查看次数

标签 统计

java ×3

caching ×2

algorithm ×1

data-structures ×1

hashtable ×1

lru ×1