Reputation: 5700
Which collection type in java should I use if I want to have something like Size-limited queue that holds last N elements in Java.
I have a list and I want to limit the size of the list to "100". So if i add the 101 th element in the list, the first element should be deleted automatically (FIFO). For example:
List<Item> items = ??;
items.add(item_1);
...
items.add(item_101); // implicitly calls items.remove(0);
items.add(item_102); // implicitly calls items.remove(0);
Upvotes: 3
Views: 1950
Reputation: 120868
You could try to write your own in 5 minutes actually, here is very dirty sketch I put up:
static class LFUList<T> extends AbstractCollection<T> {
private final int size;
private ArrayDeque<T> deque;
public LFUList(int size) {
super();
this.size = size;
deque = new ArrayDeque<>(size);
}
@Override
public Iterator<T> iterator() {
return deque.iterator();
}
@Override
public int size() {
return deque.size();
}
@Override
public boolean add(T e) {
if (deque.size() == size) {
deque.pollFirst();
}
return deque.add(e);
}
@Override
public boolean remove(Object o) {
return deque.remove(o);
}
}
Upvotes: 4