考虑CircularFifoBuffer Apache的Common.Collections。与Queue不同,你不必维护基础集合的有限大小,只要达到极限就可以包装它。
Buffer buf = new CircularFifoBuffer(4);buf.add("A");buf.add("B");buf.add("C");buf.add("D"); //ABCDbuf.add("E"); //BCDE由于以下属性,CircularFifoBuffer会为你完成此操作:
- CircularFifoBuffer是固定大小的先进先出缓冲区,如果已满,它将替换其最早的元素。
- CircularFifoBuffer的删除顺序基于插入顺序;元素将按照添加顺序相同的顺序删除。迭代顺序与删除顺序相同。
- add(Object),BoundedFifoBuffer.remove()和BoundedFifoBuffer.get()操作均在固定时间内执行。所有其他操作都在线性时间内或更差的时间执行。
但是,你也应该考虑到它的局限性-例如,你不能向该集合添加丢失的时间序列,因为它不允许空值。
注意:使用当前的通用集合(4.
*)时,必须使用队列。像这样:
Queue buf = new CircularFifoQueue(4);



