相关疑难解决方法(0)

容纳Java的最后N个元素的大小限制队列

关于Java库的一个非常简单快速的问题:是否有一个现成的类,它实现了Queue一个固定的最大大小 - 即它总是允许添加元素,但它会默默地删除头元素以容纳新添加元素的空间.

当然,手动实现它是微不足道的:

import java.util.LinkedList;

public class LimitedQueue<E> extends LinkedList<E> {
    private int limit;

    public LimitedQueue(int limit) {
        this.limit = limit;
    }

    @Override
    public boolean add(E o) {
        super.add(o);
        while (size() > limit) { super.remove(); }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,Java stdlibs中没有标准的实现,但可能是Apache Commons中的那个或类似的东西?

java queue collections

185
推荐指数
5
解决办法
11万
查看次数

是否有固定大小的队列来删除多余的元素?

我需要一个固定大小的队列.当我添加一个元素并且队列已满时,它应该自动删除最旧的元素.

Java中是否存在此实现?

java queue

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

Java中的FIFO类

我想通过Java中的类实现FIFO.

这样的课程已经存在吗?如果没有,我该如何实现自己的?

注意

我在这里找到了一个类http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html,但它不包含dmg.util.*.我不知道这样的包装是否存在.

java fifo

59
推荐指数
2
解决办法
14万
查看次数

我应该使用哪个Java集合来实现线程安全缓存?

我正在寻求实现一个简单的缓存而不需要做太多的工作(当然).在我看来,标准Java集合之一应该足够了,只需要一些额外的工作.具体来说,我正在存储来自服务器的响应,密钥可以是请求URL字符串,也可以是从URL生成的哈希代码.

我原本以为我可以使用a WeakHashMap,但看起来这种方法迫使我管理我想要保留的对象,并且我没有用强引用来管理的任何对象都会立即被扫除.我应该尝试一个ConcurrentHashMapSoftReference值呢?或者那些也会被积极地清理干净?

我现在正在看LinkedHashMap课.通过一些修改,它看起来很有希望用于MRU缓存.还有其他建议吗?

无论我使用哪个集合,我应该尝试手动修剪LRU值,还是可以信任VM偏向回收最近访问过的对象?

仅供参考,我正在Android上开发,所以我不想导入任何第三方库.我正在处理一个非常小的堆(16到24 MB),因此VM可能非常渴望回收资源.我认为GC会很有侵略性.

java multithreading caching memory-management

10
推荐指数
2
解决办法
5803
查看次数