java中的有限大小集合

时间:2017-09-15 08:44:00

标签: collections java-8

如果我想要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);

1 个答案:

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

}
相关问题