JDK集合之Deque

Deque 接口在JDK1.6 中新增,它是一个线性集合,支持两端插入和移除元素。deque是double ended queue的缩写。大多数的 Deque 实现类没有限制元素的容量,但是这个接口支持容量限制和容量不限制。

这个接口定义了两端访问队列元素的方法。提供了插入,移除,检查元素的方法。每一个方法都提供了两种形式:一种是如果操作失败抛出异常,另一种是依赖操作的返回一个指定的值null 或者 false , 后者的形式插入操作设计主要是针对容量限制的 Deque 的实现。大多数的实现类,插入操作不会失败。

然而 Deque 的实现类不是严格的禁止 null 元素的插入,但是他们强烈鼓励这么做,很多的Deque的实现类是允许插入null元素,但是设计者们不鼓励插入null元素,因为在队列为空的时候, nullDeque 的很多方法作为一个特殊值返回。

在JDK1.6中, Deque 的实现类ArrayDequeLinkedBlockingDeque,另外对 LinkedList 改造, 实现了 Deque 接口。

ArrayDeque

ArrayDequeDeque 接口的可调整大小数组的实现。没有容量的限制,它们根据需要增长以支持使用 。在缺少外部的同步,他们不是线程安全的,不支持多线程并发访问。null 元素是被禁止的。当做Stack 使用的时候,这个类比 Stack 更快,当做 Queue,它比 LinkedList 要快。
ArrayDeque 的大量的操作执行时常量时间,排除 remove,removeFirstOccurrence, removeLastOccurrence,contains,iterator.remove()和批量操作,所有的方法都是线性时间。

DequeTest.java

public class DequeTest {

    public static void main(String[] args) {

        ArrayDeque<Integer> deque = new ArrayDeque<>();
        deque.add(1);
        deque.offer(2);
        deque.forEach(System.out::println);
        System.out.println(deque.element());
        deque.pop();
        deque.poll();
        System.out.println(deque.isEmpty());
    }
}
// output:
//  1
//  2
//  1
//  true
添加新评论