实现一个队列,当尝试向队列中添加新元素并且它已满时,会自动从其头部驱逐一个元素。我们以仅追加方式插入元素的环。如果我们想要添加新元素的位置上有一个元素,我们只是覆盖给定位置的现有元素。

package learn;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        LimitedQueue<String> limitedQueue = new LimitedQueue<>(2);
        limitedQueue.add("1");
        limitedQueue.add("2");
        limitedQueue.add("3");

        System.out.println(limitedQueue);
        // [2, 3]
    }
}

class LimitedQueue<E> extends LinkedList<E> {
    private static final long serialVersionUID = 1L;
    private final int size;

    public LimitedQueue(int size) {
        this.size = size;
    }

    @Override
    public boolean add(E o) {
        super.add(o);
        while (size() > size) {
            super.remove();
        }
        return true;
    }
}