数据结构 - Queue、Deque 接口

寵の児 提交于 2020-04-04 11:52:12

简介

队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入null(通常也不允许,LinkedList除外),因为null值通常用于poll方法表示当前队列没有元素了,插入null值poll就有歧义。

Queue 接口
public interface Queue<E> extends Collection<E>

Queue继承Collection,它是单向队列,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

Queue 方法
// 添加元素到尾部,队列满时抛IllegalStateException异常
boolean add(E e);
// 添加元素到尾部,队列满时返回false
boolean offer(E e);
// 移除头部元素,队列空时抛NoSuchElementException异常
E remove();
// 移除并返回头部元素,队列为空时返回null   
E poll();
// 查询头部元素,队列为空时抛NoSuchElementException异常
E element();
// 查询头部元素,队列为空时返回null 
E peek();
Deque 接口
public interface Deque<E> extends Queue<E>

Deque继承自Queue,它是双向队列,Queue只允许取头插尾,而Deque两端都允许插取

Deque 方法
// 添加元素到尾部,队列满时抛IllegalStateException异常
void addFirst(E e);
// 添加元素到头部,队列满时抛IllegalStateException异常
void addLast(E e);
// 添加元素到尾部,队列满时返回false
boolean offerFirst(E e);
// 添加元素到头部,队列满时返回false   
boolean offerLast(E e);
// 移除头部元素,队列空时抛NoSuchElementException异常 
E removeFirst();
// 移除尾部元素,队列空时抛NoSuchElementException异常
E removeLast();
// 移除并返回头部元素,队列为空时返回null   
E pollFirst();
// 移除并返回尾部元素,队列为空时返回null   
E pollLast();
// 查询头部元素,队列为空时抛NoSuchElementException异常
E getFirst();
// 查询尾部元素,队列为空时抛NoSuchElementException异常
E getLast();
// 查询头部元素,队列为空时返回null  
E peekFirst();
// 查询尾部元素,队列为空时返回null   
E peekLast();
// 从头部开始移除第一个o元素,不存在返回false
boolean removeFirstOccurrence(Object o);
// 从尾部开始移除第一个o元素,不存在返回false
boolean removeLastOccurrence(Object o);
AbstractQueue 抽象类
public abstract class AbstractQueue<E> extends AbstractCollection<E>  
	implements Queue<E>

AbstractQueue 继承AbstractCollection抽象类

AbstractQueue 构造函数
protected AbstractQueue() {
}
AbstractQueue 已实现的方法
public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

add 实际上调用offer(e),offer(e)返回false时抛异常

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

remove() 实际上调用poll(),poll()返回null时抛异常

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

element() 实际上调用peek(),peek()返回null时抛异常

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

线性集合转化为队列,队列满了一样会抛异常

AbstractQueue抽象类没有实现Queue接口的于offer()、poll()和peek()方法

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!