数据结构 - Queue、Deque 接口

简介

队列是一种特殊的线性表。队列有单向队列和双向队列,队列内部结构多大使用数组和链表存储,一般使用数组存储的都会有初试长度和最大长度等,一般使用链表存储没有长度限制。平时在使用中最好不要像队列中插入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

时间: 2024-11-06 16:33:12

数据结构 - Queue、Deque 接口的相关文章

集合框架之Deque接口

一个线性 collection,支持在两端插入和移除元素.名称 deque 是"double ended queue(双端队列)"的缩写,通常读为"deck".大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列. 此接口定义在双端队列两端访问元素的方法.提供插入.移除和检查元素的方法.每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false

容器(Queue/Deque/Enumeration/Hashtable/Properties等)

一.队列(Queue/Deque) Queue:单向 队列通常FIFO(先进先出).优先级队列和堆栈队列(后进先出) add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 offer 添加一个元素并返回true 如果队列已满,则返回fal

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map   list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [unordered_multimap]     contiguous storage double-ended queue LIFO FIFO 1st is greatest  

Java数据结构学习—Iterator接口

迭代器是一个对象,它能是我们迭代集合中的所以元素 在Java集合类API中,Iterator接口很小,只包含三个方法: 1.boolean hasNext() 如果在这次迭代中还有迭代浏览的的项,则返回true. 2.AnyType next() 返回这个迭代器还未看到的对下一个对象的引用,对象变为可见,则迭代器后移. 3.void remove() 三次浏览的最后一个项,在对next的调用之前,只能用一次这种方法. 每个集合都定义了自己的Iterator接口的实现,对java.util包中的

LinkedList(实现了queue和deque接口)实现栈和队列的功能

底层是一个双向链表,链表擅长插入和删除操作,队列和栈最常用的2种操作都设计到插入和删除 import java.util.LinkedList; import java.util.Queue; //用linkedList模拟队列,因为链表擅长插入和删除 public class Hi { public static void main(String [] args) { //做剑指offer遇见过这个数结 Queue<String> queue = new LinkedList<Stri

Deque接口源码解析

Deque 双向队列 队头:可以插入可以删除 队尾:可以插入可以删除 继承Queue接口 源码如下: package java.util; public interface Deque<E> extends Queue<E> { /** * 队头插入元素 * * @throws 队列满了添加元素,抛出:IllegalStateException * @throws 类型不兼容,抛出:ClassCastException * @throws null队列不允许null,抛出:Null

python 中的queue, deque

创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import collections d = collections.deque() d.append(1) d.append(2) print(d) #输出:deque([1, 2]) appendleft(往左边添加一个元素) import collections d = collections.deque() d.append(1) d.appendlef

Queue(队列)接口和其实现类PriorityQueue(优先级队列)源码解析

前面介绍的Stack是新进后出,而Queue是先进先出的 1.Queue结构 public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); } Queue是一个接口. 2.PriorityQueue源码分析 PriorityQueue是一个优先队列,和先进先出的队列的区别是: 优先

自己实现数据结构---Queue

一.代码部分 1.定义接口: public interface Queue<E> { void enqueue(E e); E dequeue(); E getFront(); int getSize(); boolean isEmpty(); } 2.基于数组的实现 public class ArrayQueue<E> implements Queue<E> { private ArrayList<E> arrayList; public ArrayQue