Deque 按照我们一般的理解,Deque是一个双向队列,这将意味着它不过是对Queue接口的增强。如果仔细分析Deque接口代码的话,我们会发现它里面主要包含有4个部分的功能定义。1. 双向队列特定方法定义。 2. Queue方法定义。 3. Stack方法定义。 4. Collection方法定义。
第3,4部分的方法相当于告诉我们,具体实现Deque的类我们也可以把他们当成Stack和普通的Collection来使用。这也是接口定义规约带来的好处。这里我们就不再赘述。
我们重点来对Queue相关的定义方法做一下概括:
add相关的方法有如下几个:
Java代码 [url=][/url]
[url=][/url]
boolean add(E e); boolean offer(E e); void addFirst(E e); void addLast(E e); boolean offerFirst(E e); boolean offerLast(E e); [url=][/url]
这里定义了add, offer两个方法,从doc说明上来看,两者的基本上没什么区别。之所以定义了这两个方法是因为Deque继承了Collection, Queue两个接口,而这两个接口中都定义了增加元素的方法声明。他们本身的目的是一样的,只是在队列里头,添加元素肯定只是限于在队列的头或者尾添加。而offer作为一个更加适用于队列场景中的方法,也有存在的意义。他们的实现基本上一样,只是名字不同罢了。
remove相关的方法:
Java代码 [url=][/url]
[url=][/url]
E removeFirst(); E removeLast(); E pollFirst(); E pollLast(); E remove(); E poll(); [url=][/url]
这里remove相关的方法poll和remove也很类似,他们存在的原因也和前面一样。
get元素相关的方法:
Java代码 [url=][/url]
[url=][/url]
E getFirst(); E getLast(); E peekFirst(); E peekLast(); E element(); E peek(); [url=][/url]
peek和element方法和前面提到的差别有点不一样,element方法是在队列为空的时候抛异常,而element则是返回null。
ok,有了前面这些对方法操作的分门别类,我们后面分析起具体实现就更方便了。 |