我唯一能找到的是BoundedFIFOBuffer,不推荐使用。还有其他人吗?
答案 0 :(得分:13)
BoundedFIFOBuffer
(我假设你所指的是)并没有被弃用,它只是移动了包。 org.apache.commons.collections
中的原始版本已弃用,而已移至org.apache.commons.collections.buffer
答案 1 :(得分:13)
为什么不使用LinkedBlockingQueue
并使用非阻止方法offer
(或add
)和poll
来访问它?您可以使用固定容量创建它(即使其有界)。
答案 2 :(得分:3)
Apache commons-collections中有一些有界集合,包括BoundedFifoBuffer。
在同一个库中,还有BoundedBuffer和CircularFifoBuffer
答案 3 :(得分:2)
我最近一直在使用Google Collections。我认为你可以很容易地使用Java Generics解决方案。有一个名为ForwardingList的类,我认为你可以很容易地实现这个想法。显然不像使用BoundedFifoBuffer(非泛型)或ArrayBlockingQueue那么容易。
final ArrayList<MyObject> realList = Lists.newArrayList();
final List<MyObject> list = new ForwardingList<MyObject>() {
protected List<MyObject> delegate() {
return realList;
}
public boolean add(MyObject obj) {
if(delegate().size() > 100) return false;
return delegate().add(obj);
}
};