在apache 公共集合中有什么区别:
- 循环先进先出缓冲器
- 有界先进先出缓冲区
好的,第一个在满时删除最旧的条目,另一个以相同的顺序删除条目,就像进来的一样。但不是一样吗?
CircularFifoBuffer
延伸BoundedFifoBuffer
。它只覆盖单个方法 - add
:
public boolean add(Object element) {
if (isFull()) {
remove();
}
return super.add(element);
}
所以唯一的区别是BoundedFifoBuffer
当它满时抛出异常并且你尝试添加新元素同时CircularFifoBuffer
删除最旧的元素。
假设您将 n 个项目放入索引为 1,2,3--n 的缓冲区中
现在在 CircularFifoBuffer 和 BoundedFifoBuffer 中,空间已满。
在有界缓冲区中,由于第 n 个元素已满,它会说整个缓冲区已满。
在 CircularFifoBuffer 中,如果缓冲区已满,则丢弃最近最少添加的元素,以便插入新元素。因此,如果第 n 个元素已满,它将把下一个元素放在第一个索引中。
当BoundedFifoBuffer已满时,它会阻止插入另一个元素。但是在CircularFifoBuffer中,一旦它满了,它就会删除第一个。