码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 - Queue、Deque 接口

时间:2020-04-04 11:20:45      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:ddl   图片   结构   dal   this   enc   row   一个   com   

技术图片

简介

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

数据结构 - Queue、Deque 接口

标签:ddl   图片   结构   dal   this   enc   row   一个   com   

原文地址:https://www.cnblogs.com/yuanjiangnan/p/12630716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!