Java中的环形缓冲区
我有一个流时间序列,我有兴趣保留最后4个元素,这意味着我希望能够弹出第一个元素并将其添加到末尾。本质上我需要一个环形缓冲区。
哪个Java集合最适合此用途?向量?
回答:
考虑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()操作均在固定时间内执行。所有其他操作都在线性时间内或更差的时间执行。
但是,你也应该考虑到它的局限性-例如,你不能向该集合添加丢失的时间序列,因为它不允许空值。
注意:使用当前的通用集合(4. *
)时,必须使用队列。像这样:
Queue buf = new CircularFifoQueue(4);
以上是 Java中的环形缓冲区 的全部内容, 来源链接: utcz.com/qa/429103.html