Java JDK7源码-java.util.AbstractQueue<E>

源码

1
package java.util;
2
3
public abstract class AbstractQueue<E>
4
    extends AbstractCollection<E>
5
    implements Queue<E> {
6
7
    protected AbstractQueue() {
8
    }
9
10
    /**
11
     * 重写父类:java.util.AbstractCollection<E>
12
     * 实现接口:java.util.Queue<E>
13
     * 
14
     * 在不超出容量限制的前提下
15
     * 将e插入到queue中并返回true
16
     * 若已超出容量限制无法插入
17
     * 则抛出IllegalStateException
18
     * 
19
     * 本方法通过调用offer(E e)实现。
20
     * 若offer(E e)返回true则本方法返回true
21
     * 若offer(E e)返回false则本方法抛出IllegalStateException。
22
     * 
23
     * @throws IllegalStateException 因容量限制e此时无法被插入queue。
24
     * @throws ClassCastException e因其所属的类禁止被插入queue。
25
     * @throws NullPointerException e==null且queue禁止包含空元素。
26
     * @throws IllegalArgumentException e因其某些属性禁止被插入queue。
27
     */
28
    public boolean add(E e) {
29
        if (offer(e))
30
            return true;
31
        else
32
            throw new IllegalStateException("Queue full");
33
    }
34
35
    /**
36
     * 实现接口:java.util.Queue<E>
37
     * 
38
     * 检索,移除并返回queue的头元素。
39
     * 
40
     * 本方法与poll()的区别仅仅在于:
41
     * 若queue为空队列,poll()返回null,本方法抛出异常。
42
     * 因此,除非queue为空,否则本方法返回poll()的结果。
43
     * 
44
     * @throws NoSuchElementException queue为空。
45
     */
46
    public E remove() {
47
        E x = poll();
48
        if (x != null)
49
            return x;
50
        else
51
            throw new NoSuchElementException();
52
    }
53
54
    /**
55
     * 实现接口:java.util.Queue<E>
56
     * 
57
     * 检索并返回但不移除queue的头元素。
58
     * 
59
     * 本方法与peek()的区别仅仅在于:
60
     * 若queue为空队列,peek()返回null,本方法抛出异常。
61
     * 因此,除非queue为空,否则本方法返回peek()的结果。
62
     * 
63
     * @throws NoSuchElementException queue为空。
64
     */
65
    public E element() {
66
        E x = peek();
67
        if (x != null)
68
            return x;
69
        else
70
            throw new NoSuchElementException();
71
    }
72
73
    /**
74
     * 重写父类:java.util.AbstractCollection<E>
75
     * 
76
     * 移除queue中的所有元素。
77
     * 调用本方法后,queue将为空队列。
78
     * 
79
     * 本方法重复调用poll()直到其返回null为止。
80
     */
81
    public void clear() {
82
        while (poll() != null)
83
            ;
84
    }
85
86
    /**
87
     * 重写父类:java.util.AbstractCollection<E>
88
     * 
89
     * 将c中所有元素加入queue。
90
     * 若c为queue自身则抛出IllegalArgumentException。
91
     * 更一般的说,本方法并未定义如下行为的解决策略:c在本方法操作过程中发生变化。
92
     * 
93
     * 本方法迭代c同时将迭代得到的每个元素插入queue。
94
     * 
95
     * 在插入某个元素(特别的,这个某个元素也包含null)时若因相关异常导致插入失败
96
     * 结果只有部分元素能成功插入queue,此时会抛出运行时异常。
97
     * 
98
     * queue因本方法发生改变则返回true。
99
     * 
100
     * @throws ClassCastException c中任意一个元素因为其所属的类禁止被插入queue。
101
     * @throws NullPointerException c中任意一个元素为null且queue禁止包含空元素;或c==null。
102
     * @throws IllegalArgumentException c中任意一个元素因其某些属性禁止被插入queue;或c是queue自身。
103
     * @throws IllegalStateException 因插入限制,此时并非c中所有元素都能被插入queue。
104
     */
105
    public boolean addAll(Collection<? extends E> c) {
106
        if (c == null)
107
            throw new NullPointerException();
108
        if (c == this)
109
            throw new IllegalArgumentException();
110
        boolean modified = false;
111
        for (E e : c)
112
            if (add(e))
113
                modified = true;
114
        return modified;
115
    }
116
117
}

已整理层级关系

本类直接继承的类

本类直接实现的接口

综述

本类是Java集合框架中的一员。E为AbstractQueue所包含的元素类型。

本类提供Queue接口的基本实现。若基本实现要求不得包含空元素,本类方法会对此作出调整。add(E e),remove(),element()分别基于offer(E e),poll(),peek()。不同的是当操作失败时前者抛出异常,后者会返回失败标志(false或null)。

若要以最小化的方式实现本类,程序员必须实现Queue.offer(E e)(禁止插入空元素),Queue.peek(),Queue.poll(),Collection.size(),Collection.iterator()。若实现类无法满足Queue的规范,则应考虑使用AbstractCollection或其其他子类。

未整理层级关系

直接继承本类的类