为了账号安全,请及时绑定邮箱和手机立即绑定

Java环形缓冲区

Java环形缓冲区

隔江千里 2019-09-02 08:52:44
我有一个流时间序列,我有兴趣保留最后4个元素,这意味着我希望能够弹出第一个,然后添加到最后。基本上我需要的是一个环形缓冲区。哪个Java Collection最适合这个?向量?
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

自Guava 15.0(2013年9月发布)以来,有EvictingQueue:


一种非阻塞队列,在尝试将新元素添加到队列中并且已满时,会自动从队列头部驱逐元素。必须使用最大大小配置驱逐队列。每次将元素添加到完整队列时,队列都会自动删除其head元素。这与传统的有界队列不同,传统的有界队列在满时阻止或拒绝新元素。


此类不是线程安全的,并且不接受null元素。


使用示例:


EvictingQueue<String> queue = EvictingQueue.create(2);

queue.add("a");

queue.add("b");

queue.add("c");

queue.add("d");

System.out.print(queue); //outputs [c, d]


查看完整回答
反对 回复 2019-09-02
?
动漫人物

TA贡献1815条经验 获得超10个赞

从Java 1.6开始,ArrayDeque实现Queue并且似乎比a更快,更高效LinkedList,并且没有以下的线程同步开销ArrayBlockingQueue:来自API文档:“当使用此类时,此类可能比Stack更快一个堆栈,当用作队列时比LinkedList更快。“


final Queue<Object> q = new ArrayDeque<Object>();

q.add(new Object()); //insert element

q.poll(); //remove element


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 708 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信