java 队列_Java队列集合

队列是只能在其上执行操作的对象的集合两端的队列。

队列有两个末端,称为头和尾。

在简单队列中,对象被添加到尾部并从头部删除并首先删除首先添加的对象。

Java Collections Framework支持以下类型的队列。

  • 简单的队列允许在尾部插入和从头部移除。
  • 优先级队列为每个元素分配优先级,并允许从队列中删除具有最高优先级的元素。
  • 延迟队列向每个元素添加延迟,并仅在其延迟已过去时删除该元素。
  • 双端队列允许其元件从头部和尾部插入和移除。
  • 阻塞队列阻塞线程,当线程已满时向其添加元素,当线程为空时,它阻止线程从中删除元素。
  • 传输队列是阻塞队列,其中对象的切换发生在生产者线程和消费者线程之间。
  • 阻塞双端队列是双端队列和阻塞队列的组合。
442ab78f261919f983ad1ec6ccb42a88.png

简单队列

简单队列由 Queue 接口的实例表示。

队列允许您执行三个基本操作:

  • 从尾部添加元素
  • 从其头部移除元素
  • 在元素顶部审查

Queue接口为三个操作中的每一个定义了两个方法。如果操作不可能,一个方法抛出异常,另一个方法方法返回false或null以指示失败。

方法描述boolean add(E e)如果可能,向队列中添加一个元素。否则,它抛出异常。boolean offer(E e)如果不能添加元素,则将元素添加到队列中,而不抛出异常。 它在失败时返回false,在成功时返回true。E remove()删除队列的头。如果队列为空,它会抛出异常。此方法返回已移除的项目。E poll()从队列中删除元素。如果队列为空而不是抛出异常,则返回null。Eelement()偷看队列的头,而不从队列中删除它。 如果队列为空,它会抛出异常。E peek()查看队列,如果队列为空而不是抛出异常,则返回null。

LinkedList和PriorityQueue是Queue接口的两个实现类。LinkedList还实现了List接口。

Queue APIs

LinkedList APIs

Stack APIs

例子

以下代码显示如何将链表用作FIFO队列。

import java.util.LinkedList;import java.util.NoSuchElementException;import java.util.Queue;public class Main { public static void main(String[] args) { Queue queue = new LinkedList<>(); queue.add("Java"); // offer() will work the same as add() queue.offer("SQL"); queue.offer("CSS"); queue.offer("XML"); System.out.println("Queue: " + queue); // Let"s remove elements until the queue is empty while (queue.peek() != null) { System.out.println("Head Element: " + queue.peek()); queue.remove(); System.out.println("Removed one element from Queue"); System.out.println("Queue: " + queue); } System.out.println("queue.isEmpty(): " + queue.isEmpty()); System.out.println("queue.peek(): " + queue.peek()); System.out.println("queue.poll(): " + queue.poll()); try { String str = queue.element(); System.out.println("queue.element(): " + str); str = queue.remove(); System.out.println("queue.remove(): " + str); } catch (NoSuchElementException e) { System.out.println("queue.remove(): Queue is empty."); } }}

上面的代码生成以下结果。

b755f1137a49c00c81515aa22086d9b7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值