相关疑难解决方法(0)

Java固定内存映射

是否有一个简单,高效的Map实现,允许地图使用内存限制.

我的用例是我想动态分配创建时可用的大部分内存,但我不希望OutOFMemoryError在将来的任何时候.基本上,我想使用这个地图作为缓存,但我想避免繁重的缓存实现,如EHCache.我的需求很简单(最多一个LRU算法)

我应该进一步澄清我的缓存中的对象是char[]或类似的原语,它们不会保存对其他对象的引用.

我可以为每个条目设置最大大小的上限.

java caching dictionary memory-management fixed

13
推荐指数
3
解决办法
3702
查看次数

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

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

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

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集合仅保留最后插入的成员

正如标题所述,我正在寻找一个java集合,只保留插入集合中的N个最后一个对象.此FIFO集合不需要实现随机访问或支持更改N.

我能找到的所有集合都是阻塞(LinkedBlockingQueue)或无限大小(ArrayDeque).我找到了org.eclipse.jetty.util.ArrayQueue,但你可能会猜到这会给我的项目带来很多不必要的依赖,而且非常复杂,因为它支持更改N所以它不是我需要的.

你知道是否有一种方法可以使用一个非常常见的java库,或者我必须自己编写它?

java collections

4
推荐指数
1
解决办法
915
查看次数

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

我知道如何限制 Map 的大小(像这样,使用 LinkedHashMap.removeEldestEntry 方法就是这样做的)

我想知道如何限制列表中的大小,最好的实现方法是什么?

感谢帮助 :)

java

3
推荐指数
1
解决办法
8047
查看次数