Java语言程序设计——篇十一(4)

在这里插入图片描述
在这里插入图片描述

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

集合——Queue

  • Queue接口和Deque接口
  • ArrayDeque和LinkedList类
    • 实战演练
    • 实战演练
  • 集合转换
      • 综合实例

Queue接口和Deque接口

Queue接口是Collection的子接口,以先进先出(First-In-First-Out,FIFO)的方式排列其元素,称为队列(queue)。
在这里插入图片描述

  • Queue接口的常用方法(两组):
//操作失败抛出异常
boolean add(E e)E remove()E element()
//操作失败不抛出异常boolean offer(E e)E poll()E peek()
  • Deque接口实现双端队列,它支持从两端插入和删除元素,它同时实现了Stack和Queue的功能。
  • 基本操作方法,如下表所示。
操作类型队首元素操作队尾元素操作
插入元素addFirst(e) offerFirst(e)addLast(e) offerLast(e)
删除元素removeFirst() pollFirst()removeLast() pollLast()
返回元素getFirst() peekFirst()getLast() peekLast()

ArrayDeque和LinkedList类

  • ArrayDeque类和LinkedList类是Deque的实现类,前者是可变数组的实现,后者是线性链表的实现。
  • 可以使用增强的for循环和迭代器访问Deque的元素。

实战演练

例:ArrayDequeDemo.java

import java.util.*;
public class ArrayDequeDemo {
public static void main(String[] args) {
int[] elements = { 1, 2, 3, 0, 7, 8, 9 };
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.addFirst(5);   // 将元素5添加到队列queue中
// 将数组中的前三个元素添加到queue
for (int i = 0; i < 3; i++)queue.addFirst(elements[i]);
// 将数组中的后三个元素添加到queue
for (int i = 4; i < 7; i++)queue.offerLast(elements[i]);
// 访问queue中的每个元素
for (Integer v : queue)System.out.print(v + "  ");
System.out.println("\nsize = " + queue.size());
}
}

在这里插入图片描述

  • 如果需要经常在线性表内添加或删除元素,使用LinkedList类实现的列表的效率较高。
  • LinkedList类的构造方法
  • ①public LinkedList( ):创建空的链表
  • ②public LinkedList(Collection c):用集合c中的元素创建一个链表
    【注意】创建LinkedList对象不需要指定初始容量
  • LinkList类同时实现了List接口和Queue接口。
              LinkedList类的常用方法
常用方法功能说明
public void addFirst(E e)将元素e插入到列表的开头
public void addLast(E e)将元素e添加到列表的末尾
public E getFirst( )返回列表中的第一个元素
public E getLast( )返回列表中的最后一个元素
public E removeFirst( )删除并返回列表中的第一个元素
public E removeLast( )删除并返回列表中的最后一个元素

实战演练

【例】利用LinkedList构造一个先进后出的栈。

import java.util.*;
class StringStack
{private LinkedList<String> ld=new LinkedList<String>();public void push(String name){ld.addFirst(name);}public String pop(){return ld.removeFirst();}public boolean isEmpty(){return ld.isEmpty();}
}
public class LinkedListDemo{public static void main(String[] args) {Scanner sc=new Scanner(System.in);StringStack stack=new StringStack();System.out.println("请输入数据(quit结束)");while(true){String input=sc.next();if(input.equals("quit"))break;stack.push(input);}System.out.println("先进后出的顺序:");while(!stack.isEmpty())System.out.print(stack.pop()+"  ");}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集合转换

1️⃣可将Collection转换成不同类型的集合。

public ArrayList(Collection c)
public HashSet(Collection c)
public LinkedList(Collection c)

2️⃣可将Queue对象转换成一个List。

Queue<String> queue = new LinkedList<>();queue.add("hello");queue.add("world");//hello,worldList<String> myList = new ArrayList<>(queue);

3️⃣可将List对象转换成Set对象。

 Set<String> set = new HashSet<>(myList);//world,hello

综合实例

我们可以将Queue的示例复杂化一些,通过引入更多的功能和逻辑来展示Queue在实际应用中的潜力。该示例模拟了一个简单的银行客户队列系统,其中包括多个窗口(虽然在这个示例中我们主要关注一个队列),客户入队、出队以及查询队列状态等功能。

import java.util.LinkedList;  
import java.util.Queue;  public class BankQueueSystem {  private Queue<Customer> queue = new LinkedList<>();  // 假设这是银行的一个客户类  static class Customer {  private String name;  private int ticketNumber; // 假设这是客户的排队号  public Customer(String name, int ticketNumber) {  this.name = name;  this.ticketNumber = ticketNumber;  }  @Override  public String toString() {  return "Customer{" +  "name='" + name + '\'' +  ", ticketNumber=" + ticketNumber +  '}';  }  }  // 客户入队  public void enqueueCustomer( customer) {  synchronized (queue) {  // 在实际应用中,这里可能需要更复杂的逻辑来分配ticketNumber  queue.offer(customer);  System.out.println(customer.name + " 加入队列,当前位置:" + customer.ticketNumber);  // 注意:这里的ticketNumber只是为了示例,实际上在队列中通常不直接存储位置信息  }  }  // 客户出队(服务完成)  public Customer dequeue() {  synchronized (queue) {  if (queue.isEmpty()) {  System.out.println("队列为空,没有客户可以服务。");  return null;  }  Customer customer = queue.poll();  System.out.println(customer.name + " 离开队列,服务完成。");  return customer;  }  }  // 显示队列状态  public void showQueueStatus() {  synchronized (queue) {  if (queue.isEmpty()) {  System.out.println("队列为空。");  } else {  System.out.println("当前队列中的客户:");  for (Customer customer : queue) {  System.out.println(customer);  }  }  }  }  public static void main(String[] args) {  BankQueueSystem bankQueue = new BankQueueSystem();  // 模拟客户入队  bankQueue.enqueue(new Customer("Alice", 1));  bankQueue.enqueue(new Customer("Bob", 2));  bankQueue.enqueue(new Customer("Charlie", 3));  // 显示队列状态  bankQueue.showQueueStatus();  // 模拟服务过程,客户出队  bankQueue.dequeue();  bankQueue.dequeue();  // 再次显示队列状态  bankQueue.showQueueStatus();  // 尝试出队一个不存在的客户(队列为空)  bankQueue.dequeue();  }  
}

在这个示例中,我们创建了一个BankQueueSystem类,它内部维护了一个Queue 来存储银行客户。我们定义了一个Customer内部类来表示客户,包含客户的名字和一个假设的排队号(ticketNumber),但在实际队列操作中,我们通常不直接在队列元素中存储位置信息,这里只是为了示例目的。

我们为BankQueueSystem类添加了三个方法:enqueue用于客户入队,dequeue用于客户出队(即服务完成),showQueueStatus用于显示当前队列的状态。在main方法中,我们模拟了客户的入队和出队过程,并展示了队列状态的变化。
博主用心写,读者点关注,互动传真情,知识不迷路。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式初学-C语言-练习三

#部分题目可能在之前的博客中有&#xff0c;请谅解&#xff0c;保证常见题型均被发出# 1.计算n以内所有正奇数的和 ? n值通过键盘输入 代码&#xff1a; 1 /*2 需求&#xff1a;计算n以内所有正奇数的和 ? n值通过键盘输入3 */4 #include <stdio.h>5 6 int main()7 …

HarmonyOS NEXT——奇妙的调用方式

注解调用一句话总结Extend抽取特定组件样式、事件&#xff0c;可以传递参数Style抽取公共样式、事件&#xff0c;不可以传递参数Builder抽取结构、样式、事件&#xff0c;可以传递参数BuilderParams自定义组件中传递UI组件多个BuilderParams自定义组件中传递多个UI组件 Extend…

【练习】使用DevEco Studio编写计数器案例

效果展示 默认状态 点击加号 点击减号 知识点 类型转换&#xff08;数字 和 字符串&#xff09; 字符串转数字 方法说明例子Number()字符串 直接转数字&#xff0c;转换失败返回NaN&#xff08;字符串包含非数字&#xff09; let str1: string 1.1 console.log(Number(str1)…

数论——线性同余方程、扩欧求解线性同余方程、线性组合、原根求解

线性同余方程 线性同余方程是形如 的方程&#xff0c;其中a 、b、m 为给定的整数&#xff0c;x 是未知整数。 扩欧求解线性同余方程 void mod_slover(int a, int b, int n) {int d, x, y, x0;d extend_gcd(a, n, x, y);if (b % d ! 0)cout << "no answer";…

Linux系统驱动(二)字符设备驱动

文章目录 一、ioctl函数&#xff08;一&#xff09;函数格式&#xff08;二&#xff09;ioctl命令码的组成1. 命令码的组成2. 自己封装命令码2. 内核提供了封装命令码的宏 &#xff08;三&#xff09;使用示例1. 驱动2. 应用 一、ioctl函数 Linux内核开发者想要将数据的读写和…

LabVIEW与CANopen实现自动化生产线的设备控制与数据采集

在某工厂的自动化生产线上&#xff0c;多个设备通过CANopen网络进行通信和控制。这些设备包括传感器、执行器和PLC&#xff0c;它们共同负责监测和控制生产过程中的关键参数&#xff0c;如温度、压力、速度等。为了实现对整个生产线的集中监控和管理&#xff0c;工厂决定使用La…

计算机毕业设计选题推荐-校园服务系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

小程序开发_02项目构成

一、项目的基本结构 二、小程序的页面组成部分 三、json配置文件 ① project.config.json文件 作用&#xff1a;项目的配置文件&#xff0c;用来记录对小程序开发工具所作的个性化配置 ② sitemap.json 作用&#xff1a;是否允许被微信引擎搜索,不希望被搜索dis ③ app.jso…

AI图文创作革命:10步快速掌握自动化内容生成技巧

1.背景 新媒体时代&#xff0c;内容变得非常容易传播&#xff0c;主题及内容的质量直接影响访问量&#xff0c;如果按传统方式写一篇好的文章及配图&#xff0c;至少2天。 Ai 既然有海量的数据&#xff0c;且能够自动生成图文&#xff0c;我们需要给作者提供一个工具&#xff…

XML 学习笔记

简介&#xff1a; &#xff08;1&#xff09;XML&#xff1a;可扩展性标记语言&#xff0c;用于传输和存储数据&#xff0c;而不是展示数据&#xff0c;是W3C 推举的数据传输格式。 XML的标签必须自定义&#xff0c;但是在写标签名的时候一定要有含义。 XML 只能有一个根节点…

Linux驱动----总线

总线相关 总线注册和注销总线device对象----描述设备信息&#xff0c;包括地址&#xff0c;中断号和其他的一些自定义数据注册和注销device对象----指将device注册到mybus总线 driver对象----描述设备驱动的方法&#xff08;操作地址和中断&#xff09;注册和注销driver对象---…

MySQL第3讲--数据类型和表的修改和删除

文章目录 前言数据类型数值类型整数类型浮点数和定点数 字符串类型字符类型&#xff1a;文本类型&#xff1a;二进制数据类型 日期和时间类型实例分析 表的操作添加字段修改字段删除字段修改表名删除表 DDL总结DDL数据库操作DDL表操作 前言 上一节在MySQL第2讲–关系型数据库以…

WebSocket 协议介绍

前言 一.通用协议设计 参考链接 /* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | …

从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架

这一期开始开发header部分&#xff0c;预期实现两个目标&#xff1a; 创建 Flask 项目导入旅游数据后端实现旅游数据的查询 1 python 环境 & 开发环境 python 安装和pycharm安装需要去网上找包&#xff0c;建议python使用3.8 或者3.9版本 2 新建项目 我们新建一个文件…

还没排上 SearchGPT ?比 Perplexity 更好用的国产开源平替了解一下?

有 AI 在的科技圈,似乎没有中场休息。除了大模型发布不断,各家科技大厂也在寻找着第一个「杀手级」AI 应用的落脚之地。 OpenAI 首先瞄准的是谷歌 1750 亿美元的搜索业务市场。7 月 25 日,OpenAI 带着 AI 搜索引擎——SearchGPT 高调入场。在演示 demo 中,搜索引擎的使用体…

贪吃蛇(使用QT)

贪吃蛇小游戏 一.项目介绍**[贪吃蛇项目地址](https://gitee.com/strandingzy/QT/tree/zyy/snake)**界面一&#xff1a;游戏大厅界面二&#xff1a;关卡选择界面界面三&#xff1a;游戏界面 二.项目实现2.1 游戏大厅2.2关卡选择界面2.3 游戏房间2.3.1 封装贪吃蛇数据结构2.3.2 …

【CTFWP】ctfshow-web40

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 题目介绍&#xff1a;题目分析&#xff1a;payload&#xff1a;payload解释&#xff1a;payload2&#xff1a;payload2解释&#xff1a;flag 题目介绍&#xff1a; …

第一阶段面试问题(后半部分)

1. c语言中const *p的用法 &#xff08;1&#xff09;const int *p; 或 int const *p; 指向常量整数的指针&#xff0c;通过这个指针不能修改它所指向的整数值&#xff0c;但可以修改指针本身来指向其他地址 const int a 10; const int *p &a; // *p 20; // 错误&…

vector中 resize()和reserve()

1.resize()改变容器大小 resize除了预留内存以外&#xff0c;还会调用容器元素的构造函数&#xff0c;不仅分配了N个对象的内存&#xff0c;还会构造N个对象。从这个层面上来说&#xff0c;resize()在时间效率上是比reserve()低的。 2.reserve()容器大小管理 用于预留内存。 …

Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架

假设一个flask目录结构如下&#xff1a; my_flask_app/ │ ├── app.py ├── routes/ │ ├── __init__.py │ ├── ZhejiangProvince/ │ │ ├── __init__.py │ │ ├── la.py │ │ └── el.py │ ├── GuangdongProvince/ │ │ ├…