Queue 与 Deque 【Collection接口】【笔记】

今天五四青年节,为了勋章……挂一个笔记;

Deque

  • 支持在两端插入和移除元素
  • ArrayDeque和LinkedList是Deque的两个通用实现,官方更推荐使用AarryDeque用作栈和队列
  • 初始化方法:
  • Deque<Integer> stack = new LinkedList<Integer>();
  • Deque<String> stack = new ArrayDeque<String>();【首选这个,效率更高!】
  • 接口分析:
    • 双向队列操作:

Deque 接口

抛出异常

效果

返回特殊值

效果

插入队首

addFirst(E e)

向队头插入元素,如果元素为空,则发生NPE;

offerFirst(E e)

向队头插入元素,如果插入成功返回true,否则返回false;

插入队尾

addLast(E e)

向队尾插入元素,如果为空,则发生NPE;

offerLast(E e)

向队尾插入元素,如果插入成功返回true,否则返回false;

删除队首

removeFirst()

返回并移除队头元素,如果该元素是null,则发生NoSuchElementException;

pollFirst(),

返回并移除队头元素,如果队列无元素,则返回null;

删除队尾

removeLast()

返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException;

pollLast()

返回并移除队尾元素,如果队列无元素,则返回null;

查询队首元素

getFirst()

获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException;

peekFirst()

获取队头元素但不移除,如果队列无元素,则返回null;

查询队尾元素

getLast()

获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException;

peekLast()

获取队尾元素但不移除,如果队列无元素,则返回null;

  • 栈操作:
    • pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
    • push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException
  • 应用场景
    • 满足FIFO(First Input First Output,先进先出)场景时;
    • 满足LIFO(Last in, First out,后进先出)场景时,曾经在解析XML按标签时使用过栈这种数据结构,但是却选择Stack类,如果在进行栈选型时,更推荐使用Deque类,应为Stack是线程同步;
  • 主要实现
    • ArrayDeque: 基于数组实现的线性双向队列【更推荐使用】
    • LinkedList: 基于链表实现的链式双向队列
      • 用法:
        • LinkedList<Integer> itemList = new LinkedList<>();
        • itemList.addFirst(tmpNode.val);
        • itemList.addLast(tmpNode.val);

​​​​​​​Queue

  • Queue 是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则;
  • Queue 接口继承自Collection接口,扩展了 Collection 的接口,根据 因为容量问题而导致操作失败后处理方式的不同 可以分为两类方法: 一种在操作失败后会抛出异常,另一种则会返回特殊值;

Queue 接口

抛出异常

返回特殊值

插入队尾

add(E e)

offer(E e)

失败显示false

删除队首

remove()

poll()

失败显示null

查询队首元素

element()

peek()

失败显示null

这么基础的东西,没有谁抄谁之说吧,顶多是融合的好多,反复狗头保命;

猜你喜欢

转载自blog.csdn.net/jiayoudangdang/article/details/124574493