先给出AbstractQueue的UML图
首先,它继承了AbstractCollection,为其提供了Collection接口的实现功能,其次它实现了Queue接口。
/**
* add() 方法本身是往队列中添加元素。从这里的实现可以看到,
它通过调用offer()方法来完成元素的添加。而offer()方法在添加
元素时,成功返回true,失败返回false。这里相当于为了在无
法添加元素时抛一个异常而已,真正干活的是offer()方法。
*/
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
/**
* remove()本身是从队列头部移除一个元素,这里调用了poll()方法。
poll()在删除元素时,成功则返回队头元素,失败返回null。这里
看来,remove()也只是多了一个当从空队伍删除元素时,抛异常而异,
真正干活的是poll()方法。
*/
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
/**
* 类似的,element()本身是取但不删除队首元素。
和peek()方法一样。这里多了一个,如果没有元素就抛
个异常而异。
*/
public E element() {
E x = peek();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
/**
* 清空队列操作,通过多次调用poll()清空。。。
*/
public void clear() {
while (poll() != null)
;
}
/**
* 实现本身不难。将参数队列的所有元素加入到当前队列。
* 如果参数队列为空,抛空指针异常
* 如果参数队列是自己,抛非法参数异常
* 最后会返回是否有元素加入了本队列。
* 传入的参数队列元素必须是当前队列的子类型,通过 ? extends E限定。
* E是当前队列的泛型类型,?表示任意子类型。
*/
public boolean addAll(Collection<? extends E> c) {
if (c == null)
throw new NullPointerException();
if (c == this)
throw new IllegalArgumentException();
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
总体这个类不复杂。。。