package java.util;
//抽象类,队列的父类,实现了Queue接口,继承AbstractCollection类
public abstract class AbstractQueue<E>
        extends AbstractCollection<E>
        implements Queue<E> {

    protected AbstractQueue(){
    }

    public boolean add(E e){
        if(offer(e))
            return true;
        else
            throw new IllegalStateException("Queue full");
    }

    public E remove(){
        E x = poll();
        if(x != null)
            return x;
        else
            throw new NoSuchElementException();
    }

    public E element(){
        E x = peek();
        if(x != null)
            return x;
        else
            throw new NoSuchElementException();
    }

    public void clear(){
        while (poll() != null)
            ;
    }

    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;
    }

}