Java 集合框架(三):Deque

Deque

双端队列,既可以当队列使用,也可以当栈使用。是一个接口。我们来看看 Deque 当作栈和队列时对应的方法。

队列:

Queue Method Equivalent Deque Method 说明
add(e) addLast(e) 向队尾插入元素,失败则抛出异常
offer(e) offerLast(e) 向队尾插入元素,失败则返回false
remove() removeFirst() 获取并删除队首元素,失败则抛出异常
poll() pollFirst() 获取并删除队首元素,失败则返回null
element() getFirst() 获取但不删除队首元素,失败则抛出异常
peek() peekFirst() 获取但不删除队首元素,失败则返回null

栈:

Stack Method Equivalent Deque Method 说明
push(e) addFirst(e) 向栈顶插入元素,失败则抛出异常
offerFirst(e) 向栈顶插入元素,失败则返回false
pop() removeFirst() 获取并删除栈顶元素,失败则抛出异常
pollFirst() 获取并删除栈顶元素,失败则返回null
peek() peekFirst() 获取但不删除栈顶元素,失败则抛出异常
peekFirst() 获取但不删除栈顶元素,失败则返回null

表面上看起来非常复杂,其实也就是对容器两端进行添加修改和删除操作。Deque 的实现类有 ArrayDeque 和 LinkedList。

ArrayDeque

从名字就可以看出底层通过数组来实现。为了满足可以在数组两端插入和删除元素的需求,该数组还必需是循环数组。

特点:

  • 底层实现是循环数组。
  • 可以当作栈和对垒来使用。
  • 不是线程安全的。
  • 不允许放入 null 元素。

方法分析:

因为底层是循环数组结构,所以 ArrayDeque 就需要考虑容量和下标的问题。如果不够需要进行扩容。

Stack

这个类实现了栈的功能,继承自 Vector 类,所以它拥有 Vector 的所有方法和线程安全的特性(因为 synchronized 所以性能没那么高)。

Stack 在 Vector 的基础上加入了 栈相关的操作,比如 push,pop,peek 等等。

如果想要使用栈这种数据结构,首选更加高效的 ArrayDeque。

原文地址:https://www.cnblogs.com/paulwang92115/p/12184744.html