【Java】Stack和Deque

Java中使用Deque代替使用Stack

【Java】Stack和Deque_第1张图片

  • Vector 很多方法都用了synchronized修饰,线程安全,但效率太低,已被弃用。
  • Stack 继承Vector,暴露了set/get方法,可以进行随机位置的访问,与与Stack 的设计理念相冲突

Deuqe

  • Deuqe,即“double ended queue”的缩写,是Java中的双端队列集合类型。
  • 具备普通队列FIFO的功能,也具备了Stack的LIFO功能。
  • Deque可以由ArrayDeuqe或者LinkedList实现

ArrayDeque与LinkedList

  • ArrayDeque
    1、数组结构:可变数组来实现
    2、没有容量限制,可根据需求自动进行扩容。无法确定数据量时,后期扩容会影响效率
    3、作为栈来使用,效率要高于 Stack,作为队列来使用,效率相较于基于双向链表的LinkedList也要更好一些
    4、不支持为null的元素
  • LinkedList
    1、链表结构
    2、没有容量限制,可根据需求自动进行扩容。无法确定数据量时,有更好表现(在插入和删除时优于ArrayList,随机访问ArrayList更优)
    3、作为栈、队列或双端队列
    4、插入元素能为null

Deque中常用方法

boolean contains deque为空时不会抛异常
void addFirst(E e) 将指定的元素插入此双端队列的前面 ,空间不足抛异常
void addLast(E e) 将指定的元素插入此双端队列的后面 ,空间不足抛异常
E removeFirst() 检索并删除第一个元素,为空时抛出异常
E removeLast() 检索并删除最后一个元素,为空时抛出异常
E getFirst() 只看看第一个元素 ,不出来,为空就抛异常
E getLast() 只看看最后一个元素 ,不出来,为空就抛异常


参考:
https://chengfeng96.com/blog/2018/01/20/Java%E4%B8%AD%E7%94%A8Deque%E6%8E%A5%E5%8F%A3%E4%BB%A3%E6%9B%BFStack%E6%8E%A5%E5%8F%A3%E5%AE%8C%E6%88%90%E6%A0%88%E5%8A%9F%E8%83%BD/
https://www.cnblogs.com/code-duck/p/13569388.html

你可能感兴趣的:(Java,java,开发语言)