Queue遍历和guava的EvictingQueue

1,251 阅读1分钟

Queue的遍历

不取出的遍历

public static void main(String[] args) {
    Queue<Integer> queue = new ArrayBlockingQueue<>(5);

    queue.add(1);
    queue.add(2);
    queue.add(3);
    queue.add(4);
    queue.add(5);
    System.out.println("遍历前:" + queue);
    //遍历队列
    for (Integer item : queue) {
        System.out.println("队列元素:" + item);
    }
    System.out.println("遍历后:" + queue);
}

结果:

image.png

取出数据的遍历

public static void test2() {
    Queue<Integer> queue = new ArrayBlockingQueue<>(5);

    queue.add(1);
    queue.add(2);
    queue.add(3);
    queue.add(4);
    queue.add(5);
    System.out.println("遍历前:" + queue);
    //遍历队列
    int size = queue.size();
    for (int i = 0; i < size; i++) {
        System.out.println("队列元素:" + queue.poll());
    }
    System.out.println("遍历后:" + queue);
}

结果:

image.png

EvictingQueue

evict:驱逐、放逐

这个队列队尾添加元素会自动顶出队首添加的元素。

public static void test3() {
    Queue<Integer> queue1 = EvictingQueue.create(5);
    Queue<Integer> queue2 = new ArrayBlockingQueue<>(5);

    queue1.add(1);
    queue1.add(2);
    queue1.add(3);
    queue1.add(4);
    queue1.add(5);
    queue1.add(6);
    System.out.println(queue1);

    queue2.add(1);
    queue2.add(2);
    queue2.add(3);
    queue2.add(4);
    queue2.add(5);
    queue2.add(6);
    System.out.println(queue2);
}

结果:当插入元素数量大于队列大小,EvictingQueue会自动推进元素,而普通队列则报错。

image.png