Board logo

标题: Java 容器源码分析之Queue(2) [打印本页]

作者: look_w    时间: 2018-12-17 17:39     标题: Java 容器源码分析之Queue(2)

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,有了前面这些对方法操作的分门别类,我们后面分析起具体实现就更方便了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0