views:

284

answers:

4

The only one I can find is the BoundedFIFOBuffer, which is deprecated. Any others?

+6  A: 

BoundedFIFOBuffer in Apache Commons Collections (which I assume is what you're referring to) is not deprecated, it has just moved packages. The original one in org.apache.commons.collections is deprecated, and has instead been moved to org.apache.commons.collections.buffer

skaffman
Thanks, somehow I landed on the deprecated page.
Justin
It probably doesn't matter, since the odds of Commons Collections 4.0 actually appearing seem vanishingly small at this point.
skaffman
+2  A: 

There are some bounded collections in Apache commons-collections, including a BoundedFifoBuffer.

In the same library, is also BoundedBuffer and CircularFifoBuffer

Rich Seller
+4  A: 

Why not just use a LinkedBlockingQueue and use the non-blocking methods offer (or add) and poll to access it? You can create it with a fixed capacity (i.e. to make it bounded).

Adamski
Another good option. Thanks.
Justin
Probably not worth being concerned about, but LinkedBlockingQueue will still take a lock. Future versions of hotspot can probably optimize that away. But something to be aware of when profiling later on.
Justin Rudd
+1  A: 

I've been using Google Collections recently. I think you could have a Java Generics solution pretty easily with it. There is a class called ForwardingList which I think you could implement this idea pretty easily. Obviously not as easy as just using BoundedFifoBuffer (non-generic) or 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);
    }
};
Justin Rudd