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