限制固定长度的队列结构

来源:互联网 发布:如何制作淘宝数据包 编辑:程序博客网 时间:2024/06/06 07:57

在一个固定长度的集合里,当收到新的数据时自动丢掉最旧的数据。

/** * Created by Owen Chan * On 2017-05-10. */public class LimitQueue<E>  {    private int limitedSize;    private LinkedList<E> linkedList = new LinkedList<>();    public LimitQueue(int size) {        this.limitedSize = size;    }    public void offer(E e) {        if (linkedList.size() >= limitedSize) {            linkedList.poll();        }        linkedList.offer(e);    }    public E get(int position) {        return linkedList.get(position);    }    public E getLast() {        return linkedList.getLast();    }    public E getFirst() {        return linkedList.getFirst();    }    public int getLimit() {        return limitedSize;    }    public void setLimitedSize(int size) {        this.limitedSize = size;    }    public int size() {        return linkedList.size();    }    @Override    public String toString() {        StringBuilder buffer = new StringBuilder();        for (int i = 0; i < linkedList.size(); i++) {            buffer.append(linkedList.get(i));            buffer.append(" ");        }        return buffer.toString();    }}

测试方法:

public class UtilTest {    public static void main(String args[]) {        LimitQueue<String> limitQueue = new LimitQueue<>(3);        limitQueue.offer("a");        System.out.println(limitQueue.toString());        limitQueue.offer("b");        System.out.println(limitQueue.toString());        limitQueue.offer("c");        System.out.println(limitQueue.toString());        limitQueue.offer("d");        System.out.println(limitQueue.toString());        limitQueue.offer("e");        System.out.println(limitQueue.toString());        limitQueue.offer("f");        System.out.println(limitQueue.toString());        limitQueue.offer("g");        System.out.println(limitQueue.toString());    }}

输出结果:

a a b a b c b c d c d e d e f e f g 
0 0