Java--Queue和Deque

​Queue以及Deque都是继承于Collection,Deque是Queue的子接口。 Queue是FIFO的单向队列,Deque是双向队列。 Queue有一个直接子类PriorityQueue,而Deque中直接子类有两个:LinkedList以及ArrayDeque。

1、Queue(单向队列)

(1)基本介绍:
  • Queue是先进先出(FIFO)的单向队列,只允许在表的前端进行删除操作,在表的后端进行插入操作。

  • LinkedList类实现了Queue接口,因此可以把LinkedList当成Queue来用。

  • Queue实现通常不允许插入null元素,尽管某些实现(比如LinkedList)并不禁止插入null,但即使在允许插入null的实现中也不应该这样做,因为null也作为poll()等方法的一个特殊返回值。

(2)基本方法:
方法方法说明
add(), offer()在尾部添加元素,add()在添加失败(比如队列已满)时会报运行时错误,而offer()在添加失败时会返回false。
remove(), poll()删除元素并返回头部,当队列为空时remove()会报错NoSuchElementException,而poll()会返回null。
element(), peek()获取头部元素但不删除,当队列为空时element()会抛出异常,而peek()会返回null。

2、Deque(双端队列)

(1)基本介绍:
  • Deque是Queue的一个子接口,双端队列是指该队列的两端既能入队也能出队,如果将Deque限制为只从一端入队和出队,则可实现栈先进后出的数据结构。
  • 使用栈时应优先使用Deque接口而不是遗留Stack类,在将双端队列用作栈时,添加元素从队列头部插入,删除元素时从队列头部弹出。
  • Deque接口扩展了Queue接口,在将双端队列用作队列时,将得到先进先出的数据结构,即将元素添加到双端队列的末尾,并从双端队列的头部删除元素。
(2)基本方法:
  • 两端插入、删除和获取元素
在头部操作在尾部操作
操作失败时抛出异常操作失败时返回null操作失败时抛出异常操作失败时返回null
插入元素addFirst()offerFirst()addLast()offerLast()
删除元素removeFirst()pollFirst()removeLast()pollLast()
获取元素但不删除getFirst()peekFirst()getLast()peekLast()
  • 与栈方法等效的Deque方法
操作栈方法等效的Deque方法
插入元素push()addFirst()
删除元素pop()removeFirst()
获取栈顶元素但不删除peek()peekFirst()
  • 与Queue接口方法等效的Deque方法
操作Queue方法等效的Deque方法
插入元素add()addLast()
插入元素offer()offerLast()
删除元素remove()removeFirst()
删除元素poll()pollFirst()
获取元素但不删除element()getFirst()
获取元素但不删除peek()peekFirst()
  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中的DequeQueue都是集合框架中的接口,但它们有一些区别。 Queue是一个先进先出(FIFO)的数据结构,它只允许在队列的一端插入元素,在另一端删除元素。Queue接口有许多实现,如LinkedList、PriorityQueue等。 而Deque(Double Ended Queue)是一个双端队列,它允许在队列的两端插入和删除元素。Deque接口也有许多实现,如ArrayDequeLinkedList等。 因此,DequeQueue更加灵活,可以在队列的两端进行插入和删除操作。而Queue只能在队列的一端进行插入和删除操作。 ### 回答2: Deque(双端队列)和Queue(队列)是Java中两种不同的数据结构。 首先,Queue是一种先进先出(FIFO)的数据结构。它只能在队列的一端(称为队尾)插入新元素,并从另一端(称为队首)删除元素。Queue的常用实现类有LinkedList和PriorityQueue。 而Deque是一种既可以在队尾插入新元素,也可以在队首删除元素的数据结构。它支持FIFO和LIFO(后进先出)两种操作。在Java中,DequeQueue的子接口。Deque的常用实现类有LinkedList和ArrayDeque。 最明显的区别是,Queue只能在队尾插入元素和在队首删除元素。而Deque除了支持这两种操作外,还可以在队尾删除元素和在队首插入元素。这使得Deque相比于Queue在操作灵活性上更加强大。 此外,由于Deque实现了Queue接口,所以可以在需要Queue的地方使用Deque。也就是说,Deque既可以作为队列使用,也可以作为栈使用(栈是LIFO结构)。 在性能上,由于Deque的实现类LinkedList和ArrayDeque都是使用了双向链表和动态数组,因此它们在插入和删除操作上的性能较好,而LinkedList对于随机访问(根据索引获取元素)的性能较差。 总结来说,Deque相比于Queue更加灵活,既可以作为队列使用,也可以作为栈使用。它允许在队尾和队首进行插入和删除操作,可满足更多的应用需求。而Queue只支持队尾插入和队首删除操作,适用于先进先出的场景。 ### 回答3: Java中的DequeQueue都是用来存储元素的数据结构,但它们有一些区别。 首先,Queue是一个接口,它表示一个具有FIFO(先进先出)特性的数据结构。常见的实现类有LinkedList和PriorityQueue。它提供了一些基本的操作方法,例如插入、删除、查询队列头部元素等。 而Deque(Double Ended Queue)也是一个接口,它继承了Queue接口,并且允许在两端进行插入、删除和查询操作。除了拥有Queue接口的特性外,Deque还提供了一些额外的方法,例如在队列的头部和尾部插入和删除元素,以及获取头部和尾部元素。常见的实现类有LinkedList和ArrayDeque。 因此,主要区别在于Deque是一个双端队列,可以在队列的头部和尾部进行插入、删除和查询操作,而Queue只能在队列的尾部进行插入操作,头部进行删除和查询操作。 另外,Queue接口还提供了一些用于处理特定需求的实现类,例如PriorityQueue可以根据元素的优先级进行排序,ArrayBlockingQueue可以限制队列的容量等。 综上所述,Queue只能在队列尾部进行插入操作,具有FIFO特性;而Deque是一个双端队列,可以在队列的头部和尾部进行插入、删除和查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值