简体   繁体   中英

Is there a bounded non-blocking Collection in Java?

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

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

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 (ie to make it bounded).

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

In the same library, is also BoundedBuffer and CircularFifoBuffer

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);
    }
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM