学习 - Java Collection - AbstractQueue

先给出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;
    }

总体这个类不复杂。。。

发布了9 篇原创文章 · 获赞 2 · 访问量 200

猜你喜欢

转载自blog.csdn.net/weixin_42579367/article/details/104228235
今日推荐