Java 队列(Queue)简介与经典例子

Java 队列(Queue)简介与经典例子

在这里插入图片描述

队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。在Java中,队列是一种广泛使用的数据结构,用于处理多种实际问题。本篇博客将介绍Java中的队列及其基本操作,并通过三个经典例子来说明队列的应用场景。

队列基本概念

队列是一种线性数据结构,其元素按照顺序排列。在队列中,新元素从一端(尾部)入队,而从另一端(头部)出队。这种操作顺序确保了先进入队列的元素先被取出,符合FIFO原则。

在Java中,队列的常见实现类包括LinkedListArrayDeque。Java提供了Queue接口,定义了队列的基本操作,例如enqueue(入队)、dequeue(出队)、peek(查看队头元素)等。

Queue<String> queue = new LinkedList<>(); // 使用LinkedList实现队列
queue.offer("Element1");
queue.offer("Element2");
String head = queue.poll(); // 出队

经典例子

1. 任务调度

在多线程环境中,任务调度通常使用队列来管理待执行的任务。新任务被加入队列尾部,而工作线程则从队列头部取出任务执行。这种方式能够确保任务按照提交的顺序依次执行,有效避免了线程竞争问题。

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class TaskScheduler {
    private final BlockingQueue<Runnable> taskQueue;

    public TaskScheduler() {
        this.taskQueue = new LinkedBlockingQueue<>();
    }

    public void submitTask(Runnable task) {
        taskQueue.offer(task);
    }

    public void start() {
        while (true) {
            try {
                Runnable task = taskQueue.take(); // 阻塞直到队列非空
                new Thread(task).start(); // 执行任务
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}

2. 广度优先搜索(BFS)

在图的广度优先搜索中,队列同样扮演重要角色。从起始节点开始,依次将相邻未访问过的节点加入队列,然后从队列中取出节点进行访问。这样可以确保按照层次遍历图的节点,找到最短路径等问题。

import java.util.LinkedList;
import java.util.Queue;

public class BreadthFirstSearch {
    public void bfs(Graph graph, int start) {
        boolean[] visited = new boolean[graph.getVertexCount()];
        Queue<Integer> queue = new LinkedList<>();

        visited[start] = true;
        queue.offer(start);

        while (!queue.isEmpty()) {
            int currentVertex = queue.poll();
            System.out.print(currentVertex + " ");

            for (int neighbor : graph.getNeighbors(currentVertex)) {
                if (!visited[neighbor]) {
                    visited[neighbor] = true;
                    queue.offer(neighbor);
                }
            }
        }
    }
}

3. 缓存管理

队列也常用于实现缓存,特别是在限制缓存大小时。新数据被加入队尾,而当缓存达到最大容量时,最老的数据从队头被移除,确保缓存大小始终受限。

import java.util.LinkedList;
import java.util.Queue;

public class CacheManager<T> {
    private final Queue<T> cache;
    private final int maxSize;

    public CacheManager(int maxSize) {
        this.cache = new LinkedList<>();
        this.maxSize = maxSize;
    }

    public void addToCache(T item) {
        if (cache.size() >= maxSize) {
            cache.poll(); // 移除队头元素
        }
        cache.offer(item); // 入队
    }
}

总结

队列是一种基础而强大的数据结构,通过先进先出的特性,它在任务调度、图遍历、缓存管理等场景中都有广泛应用。在Java中,可以使用Queue接口及其实现类来方便地处理队列操作,满足各种需求。希望通过这篇博客,你对Java中的队列有了更深入的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258622.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比 style gan 更好的 style gan2

上一篇博客介绍了style gan 原理&#xff0c;但是 style gan 的结果会有水珠伪影&#xff0c;作者实验后发现是 Adain 导致的&#xff0c;AdaIN对每一个feature map的通道进行归一化&#xff0c;这样可能破坏掉feature之间的信息。当然实验证明发现&#xff0c;去除AdaIN的归一…

连接SSH报错 / 连接容器SSH

连接SSH报错 / 连接容器SSH 前言被控端主控端连接失败 前言 本文介绍如何通过SSH方式远程连接Linux被控端&#xff0c;并介绍如何解决连接失败问题。 此方法同样适用于SSH连接Docker容器。 被控端 被控端一般为Linux&#xff0c;默认已安装ssh&#xff0c;但需要手动安装ope…

复杂 SQL 实现分组分情况分页查询

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、根据 camp_status 字段分为 6 种情况 1.1 SQL语句 1.2 SQL解释 二、分页 SQL 实现 2.1 SQL语句 2.2 根据 camp_type 区分返…

[Verilog] Verilog 数据类型

主页&#xff1a; 元存储博客 文章目录 前言1. bit 类型2. reg 类型3 wire类型4 integer类型5 real类型6 parameter类型7 enum类型8 array 类型9 向量类型10 time 类型11 string 类型 前言 在 Verilog 中&#xff0c;有几种不同的数据类型可以用于声明和操作变量。 在 Verilo…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse&#xff0c;详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

遇见小黄鸭——一年开出两千多家门店,疑似员工维权,拖欠薪资?

遇见小黄鸭 遇见小黄鸭&#xff08;重庆&#xff09;食品有限公司成立于2021年10月12日&#xff0c;注册地位于重庆市渝中区 法定代表人为袁林 实际隶属于重庆中润天泽科技&#xff08;集团&#xff09;有限公司 实体业崛起&#xff1f; 经过三年疫情的冲刷&#xff0c;实体…

亚信安慧AntDB:支撑中国广电5G业务的数据库之力

自2019年6月获得5G牌照以来&#xff0c;中国广电积极利用700MHz频谱资源&#xff0c;迅速崛起为第四大运营商&#xff0c;标志着其在数字通信领域取得的巨大成就。通过与中国移动紧密合作&#xff0c;共建共享基站已超过400万座&#xff0c;为实现自主运营和差异化竞争提供了坚…

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具&#xff0c;其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台&#xff0c;如Linux、…

【诊断】linux系统下的内存溢出问题定位

步骤&#xff1a; &#xff08;1&#xff09;编写并运行一个会造成内存溢出的代码&#xff1a; import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger;public class HeapLeakTest {static AtomicInteger i new AtomicInteger(1);public static void …

202. 快乐数(快慢指针)

对于任意n&#xff0c;可能出现以下几种情况&#xff1a; 最终会得到 1。 最终会进入循环。 值会越来越大&#xff0c;最后接近无穷大。 对于第三种情况&#xff0c;我们可以简单的列举一下&#xff1a; 会发现&#xff0c;13位数字的数位平方和最大是1053&#xff0c;1…

LeetCode刷题--- 子集

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法【 http://t.csdnimg.cn/hKh2l 】 前言&#xff1a;这个专栏主要讲…

多对多关系通用操作组件,省时省力的神器

项目上有很多对多操作的场景&#xff0c;建对象&#xff0c;建mapper接口&#xff0c;设置查询条件&#xff0c;查询多对多数据等都是一项极为耗时耗力的工作。因此&#xff0c;搓了这款集建表-保存-查询-设置条件等操作于一体的组件。原理简单&#xff0c;利用$标签动态作些操…

25.BFD双向转发检查

BFD双向转发检查 链路故障检测工具&#xff0c;结合三层协议使故障检测更加快速 例如两台路由器之间加了一台二层设备 在修改优先级后&#xff0c;默认选择了下面那条优先级高的路由&#xff0c;R1 ping R2的时候是正常能ping通的 但是&#xff0c;当下面的路由出现故障后&a…

基于SpringBoot实现的社区人员管理系统

一、系统架构 前端&#xff1a;html | js | css | layui 后端&#xff1a;springboot | mybaits-plus | shiro 环境&#xff1a;jdk1.8 | mysql8 | maven 二、代码及数据库 三、功能介绍 01. 登录 02. 首页 03. 常规管理-住户模块-住户管理 04. 常规管理-住户模块-高危…

DevEco Studio Preview失败

安装DevEco Studio新建第一个项目后&#xff0c;点击Previewer预览失败&#xff0c;Preview failed Unable to start the previewer. Open PreviewerLog to check for details。 点击File->Settings->Build, Execution, Deployment->Build Tools->Hvigor&#xff…

音视频直播核心技术介绍

直播流程 采集&#xff1a; 是视频直播开始的第一个环节&#xff0c;用户可以通过不同的终端采集视频&#xff0c;比如 iOS、Android、Mac、Windows 等。 前处理&#xff1a;主要就是美颜美型技术&#xff0c;以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

任意文件下载漏洞的利用思考

0x01 前言 任意文件下载漏洞作为最常见的WEB漏洞之一&#xff0c;在平常的渗透测试中经常遇到&#xff0c;但是很多人却并没有深入去想该如何利用这种漏洞&#xff0c;导致忽略了一些细节的信息。 0x02 传统利用 1&#xff09; 下载配置文件连数据库 通过任意文件下载漏洞下载网…

翻译: LLMs关于人工智能的担忧 Concerns about AI

在短时间内&#xff0c;获取生成人工智能的能力已经在全球范围内传播&#xff0c;使许多人能够生成高质量的文章、图片和音频。随着这些惊人的能力的出现&#xff0c;也带来了许多关于人工智能的担忧。我认为即使在生成人工智能兴起之前&#xff0c;我们就已经生活在许多焦虑之…

charles和谷歌浏览器在Mac上进行软件安装,桌面上会显示一个虚拟磁盘,关掉页面推出磁盘内容都消失掉了 需要再次安装问题解决

其他软件也会有这种情况&#xff0c;这里我们以charles为例。绿色背景的内容是重点步骤。 1.如图&#xff0c;我下载了一个charles一个版本的dmg文件。 2.打开后&#xff0c;选择Agree 3.桌面会出现一个磁盘和如下页面 4.错误操作------可以不看 直接看第5步正确操作 常规情…

为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?

1、什么是梯度消失&#xff08;gradient vanishing&#xff09;&#xff1f; 参数更新过小&#xff0c;在每次更新时几乎不会移动&#xff0c;导致模型无法学习。 2、什么是梯度爆炸&#xff08;gradient exploding&#xff09;&#xff1f; 参数更新过小大&#xff0c;破坏了…