Java集合框架的Queue
接口提供了队列数据结构的功能。它扩展了Collection
接口。
实现队列的类
由于Queue
是一个接口,因此我们无法提供它的直接实现。
为了使用Queue
的功能,我们需要使用实现它的类:
- ArrayDeque
- 链表
- PriorityQueue
扩展Queue的接口
Queue
接口还通过各种子接口扩展:
-
Deque
-
BlockingQueue
-
BlockingDeque
队列数据结构的工作
在队列中, 以先进先出的方式存储和访问元素。也就是说,元素从后面添加, 从前面删除 。
如何使用队列?
在Java中,必须导入java.util.Queue
包才能使用Queue
。
// LinkedList implementation of Queue
Queue animal1 = new LinkedList<>();
// Array implementation of Queue
Queue animal2 = new ArrayDeque<>();
// Priority Queue implementation of Queue
Queue animal 3 = new PriorityQueue<>();
在这里,我们分别创建了LinkedList
, ArrayDeque
和PriorityQueue
类的对象animal1 , animal2和animal3 。这些对象可以使用Queue
接口的功能。
排队方法
Queue
接口包括Collection
接口的所有方法。这是因为Collection
是Queue
的超级接口。
Queue
接口的一些常用方法是:
- add() -将指定的元素插入队列。如果任务成功,则
add()
返回true
,否则返回异常。 - offer() -将指定的元素插入队列。如果任务成功,
offer()
返回true
,否则返回false
。 - element() -返回队列的开头。如果队列为空,则引发异常。
- peek() -返回队列的开头。如果队列为空,则返回
null
。 - remove() -返回并删除队列的头部。如果队列为空,则引发异常。
- poll() -返回并删除队列的头部。如果队列为空,则返回
null
。
队列接口的实现
1.实现LinkedList类
import java.util.Queue;
import java.util.LinkedList;
class Main {
public static void main(String[] args) {
// Creating Queue using the LinkedList class
Queue numbers = new LinkedList<>();
// offer elements to the Queue
numbers.offer(1);
numbers.offer(2);
numbers.offer(3);
System.out.println("Queue: " + numbers);
// Access elements of the Queue
int accessedNumber = numbers.peek();
System.out.println("Accessed Element: " + accessedNumber);
// Remove elements from the Queue
int removedNumber = numbers.poll();
System.out.println("Removed Element: " + removedNumber);
System.out.println("Updated Queue: " + numbers);
}
}
输出
Queue: [1, 2, 3]
Accessed Element: 1
Removed Element: 1
Updated Queue: [2, 3]
要了解更多信息,请访问Java LinkedList。
2.实现PriorityQueue类
import java.util.Queue;
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating Queue using the PriorityQueue class
Queue numbers = new PriorityQueue<>();
// offer elements to the Queue
numbers.offer(5);
numbers.offer(1);
numbers.offer(2);
System.out.println("Queue: " + numbers);
// Access elements of the Queue
int accessedNumber = numbers.peek();
System.out.println("Accessed Element: " + accessedNumber);
// Remove elements from the Queue
int removedNumber = numbers.poll();
System.out.println("Removed Element: " + removedNumber);
System.out.println("Updated Queue: " + numbers);
}
}
输出
Queue: [1, 5, 2]
Accessed Element: 1
Removed Element: 1
Updated Queue: [2, 5]
要了解更多信息,请访问Java PriorityQueue。
在接下来的教程中,我们将详细了解Queue
接口的不同子接口及其实现。