Есть ли ограниченная неблокирующая коллекция в Java?

Единственное, что я могу найти, это BoundedFIFOBuffer, который устарел. Любые другие?

4 ответа

BoundedFIFOBuffer в коллекциях Apache Commons (что я предполагаю, это то, о чем вы говорите) не устарело, оно только что переместило пакеты. Исходный текст в org.apache.commons.collections устарел и вместо этого был перенесен на org.apache.commons.collections.buffer


Почему бы просто не использовать LinkedBlockingQueue и использовать неблокирующие методы offer (или add) и poll получить доступ к нему? Вы можете создать его с фиксированной емкостью (т.е. Сделать его ограниченной).


В Apache коллекций коллекций есть некоторые ограниченные коллекции, в том числе BoundedFifoBuffer.

В той же библиотеке также BoundedBuffer и CircularFifoBuffer


Недавно я использовал 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);
 }
};
</myobject></myobject></myobject></myobject>

licensed under cc by-sa 3.0 with attribution.