Java队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。因此,队列又称为“先进先出”(FIFO—first in first out)线性表。Java中的Queue接口是一个有序集合,它以特定的方式存储和访问元素。
Java中的Queue接口有多种实现方式。LinkedList、ArrayDeque和PriorityQueue都是常用的实现方式。LinkedList是一个双向链表实现的队列;ArrayDeque是一个动态数组实现的队列;PriorityQueue是一个基于优先堆实现的队列。
// 声明一个LinkedList对象来作为队列 LinkedList<String> queue = new LinkedList<String>(); // 添加元素 queue.add("element1"); queue.add("element2"); queue.add("element3"); // 访问并删除头部元素 String element = queue.poll(); // element1 System.out.println(element); // element1 System.out.println(queue); // [element2, element3]
队列是只能在其上执行操作的对象的集合两端的队列。
队列有两个末端,称为头和尾。
在简单队列中,对象被添加到尾部并从头部删除并首先删除首先添加的对象。
Java Collections Framework支持以下类型的队列。
简单队列由 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<String> 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."); } } }
上面的代码生成以下结果。
JSF教程 -JSF setPropertyActionListener示例h:setPropertyActionListener标记将一个操作监听器添加到将bean属性设置为给定值的...
JSF教程 -JSF表单列表框示例以下部分显示如何在JSF中创建ListBox。h:selectOneListbox标记渲染HTML输入具有指定大小的“select类...
JSF教程 -JSF验证双值范围示例f:validateDoubleRange标记用于将值验证为浮点值范围。以下代码显示如何使用f:validateLongRange标...
JSF教程 -JSF DataTable更新示例以下代码显示如何更新DataTable。例子下面的代码来自UserBean.java。package cn..common;import ...