队列(Java)

什么是队列

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。采用链表实现的队列,没有个数限制。插入元素时直接接在链表的尾部,取出元素时直接从链表的头部取出即可。采用数组实现的队列,通常是循环数组,受限于数组的大小,存在天然的个数上限。插入和取出元素时,必须采用队列头部指针和队列尾部指针进行队列满和队列空的判断。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
在这里插入图片描述

队列的简单使用

import java.util.LinkedList;
import java.util.Queue;
 
public class Main {
    public static void main(String[] args) {
        //add()和remove()方法在失败的时候会抛出异常(不推荐)
        Queue<String> queue = new LinkedList<String>();
        //添加元素
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        queue.offer("d");
        queue.offer("e");
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("element="+queue.element()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("peek="+queue.peek()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
    }
}

队列常用方法

add 增加一个元索
  remove 移除并返回队列头部的元素
  element 返回队列头部的元素
  offer 添加一个元素并返回true
  poll 移除并返问队列头部的元素
  peek 返回队列头部的元素
  put 添加一个元素
  take 移除并返回队列头部的元素
add、remove;
offer 操作失败返回 false 或抛出异常,poll、peek 操作失败返回 null;

Java中,队列(Queue)是一种先进先出(FIFO, First In First Out)的数据结构,它允许在队列的尾部添加元素,并在队列的头部移除或获取元素。Java中的队列功能主要由`java.util.Queue`接口提供,该接口定义了一系列用于操作队列的方法[^1]。 ### Queue接口的主要方法 `Queue`接口提供了以下常用方法来操作队列: - `boolean add(E e)`:将指定元素插入队列的尾部。如果队列已满,则抛出异常。 - `boolean offer(E e)`:将指定元素插入队列的尾部。如果队列已满,则返回`false`而不是抛出异常。 - `E remove()`:获取并移除队列头部的元素。如果队列为空,则抛出异常。 - `E poll()`:获取并移除队列头部的元素。如果队列为空,则返回`null`。 - `E element()`:获取但不移除队列头部的元素。如果队列为空,则抛出异常。 - `E peek()`:获取但不移除队列头部的元素。如果队列为空,则返回`null`。 - `int size()`:返回队列中的元素数量[^3]。 ### Java队列的实现类 `Queue`接口的常见实现类包括`LinkedList`、`PriorityQueue`和`ArrayDeque`等。其中,`LinkedList`是最常用的实现类之一,它支持在两端高效地插入和删除元素。 #### 使用`LinkedList`实现队列 以下是一个使用`LinkedList`实现队列的简单示例: ```java import java.util.Queue; import java.util.LinkedList; public class QueueExample { public static void main(String[] args) { // 创建一个队列 Queue<String> queue = new LinkedList<>(); // 向队列中添加元素 queue.offer("元素A"); queue.offer("元素B"); queue.offer("元素C"); // 输出队列的大小 System.out.println("队列大小:" + queue.size()); // 从队列中取出并输出元素 while (queue.size() > 0) { String element = queue.poll(); System.out.println(element); } // 检查队列是否为空 System.out.println("队列是否为空:" + queue.isEmpty()); } } ``` 在这个示例中,`offer()`方法用于向队列中添加元素,而`poll()`方法用于从队列中取出元素。当队列为空时,`poll()`方法会返回`null`而不是抛出异常[^4]。 #### 使用`PriorityQueue`实现优先队列 `PriorityQueue`是一个基于堆的优先队列实现,它保证队列中的元素按照某种优先级顺序排列。默认情况下,`PriorityQueue`是一个最小堆,即队列头部始终是当前队列中最小的元素。 ```java import java.util.PriorityQueue; import java.util.Queue; public class PriorityQueueExample { public static void main(String[] args) { // 创建一个优先队列 Queue<Integer> priorityQueue = new PriorityQueue<>(); // 向队列中添加元素 priorityQueue.offer(5); priorityQueue.offer(1); priorityQueue.offer(3); // 从队列中取出并输出元素 while (!priorityQueue.isEmpty()) { System.out.println(priorityQueue.poll()); } } } ``` 在这个示例中,尽管元素是以5、1、3的顺序插入的,但由于`PriorityQueue`的特性,`poll()`方法会按照1、3、5的顺序取出元素。 ### 队列的使用场景 队列在实际开发中有广泛的应用场景,例如: - **任务调度**:操作系统中的进程调度通常使用队列来管理等待执行的任务。 - **消息传递**:在分布式系统中,队列常用于实现异步消息传递机制。 - **广度优先搜索(BFS)**:在图算法中,队列用于实现广度优先搜索。 ### 总结 Java中的`Queue`接口提供了一种灵活的方式来实现队列数据结构。通过使用不同的实现类(如`LinkedList`和`PriorityQueue`),可以满足不同场景下的需求。此外,`Queue`接口提供的方法使得队列的操作既安全又高效,避免了直接操作底层数据结构的风险[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值