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。
    讨论学习 qq 群:725758660

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号