您的位置:首页 > 编程语言 > Java开发

JDK源码(1.7) -- java.util.Deque<E>

2017-02-15 21:59 363 查看
java.util.Deque<E> 源码分析(JDK1.7)

---------------------------------------------------------------------------------

java.util.Deque<E>是一个接口,它的定义如下:

1 public interface Deque<E> extends Queue<E> {
2     //Modify methods
3     //Queue methods
4     //Stack methods
5     //Collection methods
6 }


(1)java.util.Deque<E>是一个线性collection,支持在两端插入和移除元素。(名称deque是"double ended queue" 双端队列)。

(2)java.util.Deque<E>接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

(3)java.util.Deque<E>接口定义在双端队列访问元素的方法,提供插入、移除、检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常;另一种形式返回一个特殊值(null或false)。

下表总结了上述说的插入、移除、检查方法:

第一个元素(头部)最后一个元素(尾部)
抛出异常特殊值抛出异常特殊值
插入addFirst(e)offerFirst(e)addLast(e)offerLast(e)
移除removeFirst()pollFirst()removeLast()pollLast()
检查getFirst()peekFirst()getLast()peekLast()
(4)java.util.Deque<E>接口扩展了java.util.Queue<E>接口,在将双端队列用作队列时,将得到FIFO行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从java.util.Queue<E>接口继承的方法完全等效于java.util.Deque<E>方法,如下表:

Queue方法等效Deque方法
add(e)addLast(e)
offer(e)offerLast(e)
remove()removeFirst()
poll()pollFirst()
element()getFirst()
peek()peekFirst()
(5)双端队列也可以用作LIFO(先进先出)堆栈。(PS:如果要使用堆栈功能,应该优先使用此接口而不是遗留的java.util.Stack类)在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列的开头弹出,堆栈方法完全等效于Deque方法,如下表:

堆栈方法等效Deque方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()
下面来看一副图:



----------------------------------------------------------------------------------------

下面来看看java.util.Deque<E>中具体有哪些方法

头、尾元素操作void addFirst(E e)将指定元素插入此双端队列的开头
void addLast(E e)将指定元素插入此双端队列的末尾
boolean offerFirst(E e)将指定的元素插入此双端队列的开头
boolean offerLast(E e)将指定的元素插入此双端队列的末尾
E removeFirst()获取并移除此双端队列第一个元素
E removeLast()获取并移除此双端队列的最后一个元素
E pollFirst()获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null
E pollLast();获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null
E getFirst()获取,但不移除此双端队列的第一个元素
E getLast()获取,但不移除此双端队列的最后一个元素
E peekFirst()获取,但不移除此双端队列的第一个元素
E peekLast()获取,但不移除此双端队列的最后一个元素
boolean removeFirstOccurrence(Object o)从此双端队列移除第一次出现的指定元素
boolean removeLastOccurrence(Object o)  从此双端队列移除最后一次出现的指定元素
队列操作boolean add(E e)将指定元素插入此双端队列所表示的队列
boolean offer(E e)将指定元素插入此双端队列所表示的队列
E remove()获取并移除此双端队列所表示的队列的头部
E poll()获取并移除此双端队列所表示的队列的头部
E element()获取,但不移除此双端队列所表示的队列的头部
E peek()获取,但不移除此双端队列所表示的队列的头部
堆栈操作void push(E e)将一个元素推入此双端队列所表示的堆栈
E pop()从此双端队列所表示的堆栈中弹出一个元素
集合操作boolean remove(Object o)从此双端队列中移除第一次出现的指定元素
boolean contains(Object o)如果此双端队列包含指定元素,则返回 true
public int size()返回此双端队列的元素数
Iterator<E> iterator()返回以恰当顺序在此双端队列的元素上进行迭代的迭代器
Iterator<E> descendingIterator()返回以逆向顺序在此双端队列的元素上进行迭代的迭代器
----------------------------------------------------------------------------------------

java.util.Deque<E>源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)

1 package java.util;
2
3
4
5 public interface Deque<E> extends Queue<E> {
6     /*head、tail operation methods*/
7     void addFirst(E e);
8     void addLast(E e);
9
10     boolean offerFirst(E e);
11     boolean offerLast(E e);
12
13     E removeFirst();
14     E removeLast();
15
16     E pollFirst();
17     E pollLast();
18
19     E getFirst();
20     E getLast();
21
22     E peekFirst();
23     E peekLast();
24
25     boolean removeFirstOccurrence(Object o);
26     boolean removeLastOccurrence(Object o);
27
28     // *** Queue methods ***
29     boolean add(E e);
30     boolean offer(E e);
31     E remove();
32     E poll();
33     E element();
34     E peek();
35
36
37     // *** Stack methods ***
38     void push(E e);
39     E pop();
40
41
42     // *** Collection methods ***
43     boolean remove(Object o);
44     boolean contains(Object o);
45     public int size();
46     Iterator<E> iterator();
47     Iterator<E> descendingIterator();
48 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: