gpt4 book ai didi

java - Java中的环形缓冲区

转载 作者:IT老高 更新时间:2023-10-28 11:53:10 26 4
gpt4 key购买 nike

我有一个流式时间序列,我有兴趣保留最后 4 个元素,这意味着我希望能够弹出第一个元素,然后添加到最后。基本上我需要的是 ring buffer .

哪个 Java 集合最适合这个? vector ?

最佳答案

考虑 CircularFifoBuffer来自 Apache Common.Collections .不像 Queue您不必维护底层集合的有限大小并在达到限制后将其包装。

Buffer buf = new CircularFifoBuffer(4);
buf.add("A");
buf.add("B");
buf.add("C");
buf.add("D"); //ABCD
buf.add("E"); //BCDE

CircularFifoBuffer 会因为以下属性为您执行此操作:

  • CircularFifoBuffer 是一个 先进先出缓冲区,具有固定的大小,如果已满,则替换其最旧的元素。
  • 一个 CircularFifoBuffer 的移除顺序是基于插入的命令;元素以与它们相同的顺序被删除添加。迭代顺序与移除顺序相同。
  • add(Object)、BoundedFifoBuffer.remove() 和BoundedFifoBuffer.get() 操作都在恒定时间内执行。所有其他操作都在线性时间或更短的时间内执行。

但是您也应该考虑到它的局限性 - 例如,您不能将缺失的时间序列添加到此集合中,因为它不允许空值。

注意:使用当前 Common Collections 时(4.*),你必须使用队列。像这样:

Queue buf = new CircularFifoQueue(4);

关于java - Java中的环形缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7266042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com