Единственное, что я могу найти, это BoundedFIFOBuffer, который устарел. Любые другие?
Есть ли ограниченная неблокирующая коллекция в Java?
Ответ 1
BoundedFIFOBuffer
в коллекциях Apache Commons (что я предполагаю, это то, о чем вы говорите) не устарело, оно только что переместило пакеты. Исходный текст в org.apache.commons.collections
устарел и вместо этого был перенесен на org.apache.commons.collections.buffer
Ответ 2
Почему бы просто не использовать LinkedBlockingQueue
и использовать неблокирующие методы offer
(или add
) и poll
получить доступ к нему? Вы можете создать его с фиксированной емкостью (т.е. Сделать его ограниченной).
Ответ 3
В Apache коллекций коллекций есть некоторые ограниченные коллекции, в том числе BoundedFifoBuffer.
В той же библиотеке также BoundedBuffer и CircularFifoBuffer
Ответ 4
Недавно я использовал 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);
}
};