如果我想要Size-limited queue that holds last N elements in Java之类的东西,我应该使用java中的哪种集合类型。
我有一个列表,我想将列表的大小限制为“100”。因此,如果我在列表中添加第101个元素,则应自动删除第一个元素(FIFO)。例如:
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);
答案 0 :(得分:3)
你可以尝试在5分钟内自己编写,这里是我提出的非常脏草图:
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);
}
}