3

apache 公共集合中有什么区别:

  1. 循环先进先出缓冲器
  2. 有界先进先出缓冲区

好的,第一个在满时删除最旧的条目,另一个以相同的顺序删除条目,就像进来的一样。但不是一样吗?

4

3 回答 3

5

CircularFifoBuffer延伸BoundedFifoBuffer。它只覆盖单个方法 - add

public boolean add(Object element) {
    if (isFull()) {
        remove();
    }
    return super.add(element);
}

所以唯一的区别是BoundedFifoBuffer当它满时抛出异常并且你尝试添加新元素同时CircularFifoBuffer删除最旧的元素。

于 2013-02-01T09:24:03.507 回答
3

假设您将 n 个项目放入索引为 1,2,3--n 的缓冲区中

现在在 CircularFifoBuffer 和 BoundedFifoBuffer 中,空间已满。

在有界缓冲区中,由于第 n 个元素已满,它会说整个缓冲区已满。

在 CircularFifoBuffer 中,如果缓冲区已满,则丢弃最近最少添加的元素,以便插入新元素。因此,如果第 n 个元素已满,它将把下一个元素放在第一个索引中。

于 2013-02-01T09:16:20.290 回答
2

BoundedFifoBuffer已满时,它会阻止插入另一个元素。但是在CircularFifoBuffer中,一旦它满了,它就会删除第一个。

于 2013-02-01T09:28:57.153 回答