Java Queue工具类
Queue(队列)是一种常用的数据结构,它按照先进先出(First In First Out,FIFO)的原则进行操作。在Java中,Queue是一个接口,它继承自Collection接口,定义了一组队列操作的方法。
Java提供了多种实现Queue接口的类,包括ArrayDeque、LinkedList和PriorityQueue。这些类分别实现了不同的队列操作方式,可以根据实际的需求选择合适的实现类。
ArrayDeque
ArrayDeque是一个基于数组的双端队列,它可以在队列的两端进行插入和删除操作。下面是ArrayDeque的一些常用操作方法:
addFirst(E e)
:在队列的头部插入一个元素。addLast(E e)
:在队列的尾部插入一个元素。removeFirst()
:删除并返回队列的头部元素。removeLast()
:删除并返回队列的尾部元素。getFirst()
:获取队列的头部元素。getLast()
:获取队列的尾部元素。
下面是使用ArrayDeque的示例代码:
import java.util.ArrayDeque;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
// 在队列的尾部插入元素
queue.addLast("A");
queue.addLast("B");
queue.addLast("C");
// 获取并删除队列的头部元素
String first = queue.removeFirst();
System.out.println(first); // 输出:A
// 获取队列的头部元素
String head = queue.getFirst();
System.out.println(head); // 输出:B
}
}
LinkedList
LinkedList是一个基于双向链表的队列,它可以在队列的头部和尾部进行插入和删除操作。LinkedList实现了Deque接口,Deque继承自Queue接口,因此LinkedList可以作为Queue的实现类使用。
LinkedList的常用操作方法与ArrayDeque类似,下面是一些常用的方法:
addFirst(E e)
:在队列的头部插入一个元素。addLast(E e)
:在队列的尾部插入一个元素。removeFirst()
:删除并返回队列的头部元素。removeLast()
:删除并返回队列的尾部元素。getFirst()
:获取队列的头部元素。getLast()
:获取队列的尾部元素。
下面是使用LinkedList的示例代码:
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> queue = new LinkedList<>();
// 在队列的尾部插入元素
queue.addLast("A");
queue.addLast("B");
queue.addLast("C");
// 获取并删除队列的头部元素
String first = queue.removeFirst();
System.out.println(first); // 输出:A
// 获取队列的头部元素
String head = queue.getFirst();
System.out.println(head); // 输出:B
}
}
PriorityQueue
PriorityQueue是一个基于优先级堆的队列,它可以根据元素的优先级进行插入和删除操作,优先级高的元素会被先删除。PriorityQueue可以通过Comparator或Comparable接口来指定元素的优先级比较方式,默认情况下使用元素的自然顺序。
下面是PriorityQueue的一些常用操作方法:
add(E e)
:将元素插入队列。remove()
:删除并返回队列的头部元素。peek()
:获取队列的头部元素。
下面是使用PriorityQueue的示例代码:
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
PriorityQueue<Integer> queue = new PriorityQueue<>();
// 插入元素
queue.add(5);
queue.add(3);
queue.add(7);
// 获取并删除队列的头部元素
int first = queue.remove();
System.out.println(first); // 输出:3
// 获取队列的头部元素
int head = queue.peek();
System.out.println(head); // 输出:5
}
}
序列图
下面是使用mermaid语法绘制的Queue工具类的序列图:
sequence