简介
队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入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()方法
来源:https://www.cnblogs.com/yuanjiangnan/p/12630716.html