nimo23
nimo23

Reputation: 5700

limited size Collection in java

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

Answers (1)

Eugene
Eugene

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

Related Questions