关于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中的那个或类似的东西?
我正在使用ConcurrentQueue共享数据结构,其目的是保存传递给它的最后N个对象(历史记录类型).
假设我们有一个浏览器,我们希望最后100个浏览Urls.我想要一个队列,当容量变满时(历史中的100个地址),当新条目插入(入队)时自动删除(出列)最旧的(第一个)条目.
我怎样才能实现这个目标System.Collections?
我有一个流时间序列,我有兴趣保留最后4个元素,这意味着我希望能够弹出第一个,然后添加到最后.哪个Java Collection最适合这个?矢量?
我需要一个固定大小(在创建它时可在运行时选择,而不是编译时)循环缓冲区,它可以容纳任何类型的对象,并且它需要非常高的性能.我不认为会有资源争用问题,因为虽然它是在多任务嵌入式环境中,但它是一个合作的,所以任务本身可以管理它.
我最初的想法是在缓冲区中存储一个简单的结构,它包含类型(简单的枚举/定义)和一个指向有效负载的void指针,但我希望它尽可能快,所以我愿意接受绕过的建议堆.
实际上我很高兴绕过任何标准库的原始速度 - 从我所看到的代码来看,它没有针对CPU进行大量优化:看起来他们只是为了类似的东西编译C代码,strcpy()没有手工编码组装.
任何代码或想法将不胜感激.所需的操作是:
在.Net BCL中有一个类似于列表的集合数据结构,具有最大容量,比如说配置为100个项目,当添加项目101时,从集合中弹出/删除原始的第一个项目,从而确保项目计数永远不会超过100.
我正在使用.net 3.5
提前致谢
是否存在可用于散列数据的现有数据结构,以便能够删除最旧的元素?
我现在想到的方法是使用Dictionary快速查找字典和队列,并能够使用队列从Dictionary中删除最旧的元素.
我有一个高效的C#应用程序,它在多线程CPU上以每秒5k到10k记录的速率接收80字节的数据.
我现在需要设置一个内存缓存来检测和过滤重复记录,这样我就可以抑制它们在管道中进一步移动.
缓存规格(最大阈值)
题
设置内存缓存,字典,哈希表,数组等的最佳方法是什么,它将允许最有效的查找,清除旧的缓存数据,并防止被击中的数据到期.
我查看了ASP.Net Cache,System.Runtime.MemoryCache,但我认为我需要一些更轻量级的东西来定制以获得正确的吞吐量.我也在看System.Collections.Concurrent作为替代和相关的白皮书.
有没有人对最佳方法有什么建议?