day09——集合ArrayList

ArrayList类

ArrayList表示一种集合,它是一个容器,用来存储数据的,类似于数组。但不同于数组,数组一旦创建大小不变,而集合大小是可变的

ArrayList常用方法

ArrayList是泛型类,可以约束存储的数据类型,创建对象,调用无参数构造器初始化对象:public ArrayList();

想要使用ArrayList存储数据,并对数据进行操作:

第一步:创建ArrayList容器对象。一般使用空参数构造方法,如下图所示:

第二步:调用ArrayList类的常用方法对容器中的数据进行操作。常用方法如下:

public class Demo1 {public static void main(String[] args) {//1. public ArrayList<泛型>() 创建一个空的集合对象//  泛型:限定集合中装载数据的类型,(注意: 这里只能是引用类型)ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("Java");list.add("我爱Java");System.out.println(list);//[Java, Java, 我爱Java]
​//3. public void add(int index,E element)   在此集合中的指定位置插入指定的元素(插队)list.add(1,"最好的编程语言之一");System.out.println(list);//[Java, 最好的编程语言之一, Java, 我爱Java]//4. public int size()  返回集合中的元素的个数System.out.println(list.size());//4//5. public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素list.set(1,"是一门好的编程语言");System.out.println(list);//[Java, 是一门好的编程语言, Java, 我爱Java]//6. public E get(int index)    返回指定索引处的元素System.out.println(list.get(3));//我爱Java//7. public E remove(int index) 删除指定索引处的元素,返回被删除的元素System.out.println(list.remove(1));//是一门好的编程语言System.out.println(list);//[Java, Java, 我爱Java]
​//8. public boolean remove(Object o)    删除指定的元素中的第一个,删除成功返回trueSystem.out.println(list.remove("Java"));//true  默认删除的是第一次出现的"Java"System.out.println(list);//[Java, 我爱Java]}
​
}

删除特例

现在假如购物车中存储了如下这些商品:Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。 现在用户不想买枸杞了,选择了批量删除,请完成该需求。

实现方式:方式一:每次删除一个数据后,索引-1。方式二:从集合后面遍历然后删除,可以避免漏掉元素。1.用户可以选购多个商品,可以创建一个ArrayList集合,存储这些商品2.按照需求,如果用户选择了"枸杞"批量删除,应该删除包含"枸杞"的所有元素1)这时应该遍历集合中每一个String类型的元素2)使用String类的方法contains判断字符串中是否包含"枸杞"3)包含就把元素删除3.输出集合中的元素,看是否包含"枸杞"的元素全部删除public class Demo{public static void main(String[] args) {//1. 创建一个ArrayList集合对象ArrayList<String> list = new ArrayList<>();list.add("Java入门");list.add("宁夏枸杞");list.add("黑枸杞");list.add("人字拖");list.add("特级枸杞");list.add("枸杞子");System.out.println(list);//[Java入门, 宁夏枸杞, 黑枸杞, 人字拖, 特级枸杞, 枸杞子]
​/* 方法1://2.开始完成需求:从集合中找出包含枸杞的数据并删除它for (int i = 0; i < list.size(); i++) {// 取出当前遍历到的数据String s = list.get(i);// 判断这个数据中是否包含枸杞if (s.contains("枸杞")){//直接从集合中删除该数据list.remove(s);i--;}}System.out.println(list);*/
​//方法2:for (int i = list.size()-1; i >= 0; i--) {// 取出当前遍历到的数据String s = list.get(i);// 判断这个数据中是否包含枸杞if (s.contains("枸杞")){//直接从集合中删除该数据list.remove(s);}}System.out.println(list);}
}

ArrayList应用案例

需求:模仿外卖系统中的商家系统,实现菜品的上架、下架、根据菜品编号查询菜品信息、根据菜品编号修改菜品信息、浏览全部菜品信息的功能。

要求:使用所学的ArrayList集合结合面向对象编程实现以上功能。

分析:

  1. 在外卖系统中,每一份菜都包含,菜品的编号、菜品的名称、菜品的原价、菜品的会员价、菜品的其他信息。那我们就可以定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。

  2. 接着再写一个菜品管理类(FoodManager类),实现菜品的上架、下架、根据菜品编号查询菜品信息、根据菜品编号修改菜品信息、浏览全部菜品信息的功能。

  • 首先我们先定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。

public class Food {//1.定义属性private int id;//编号private String name;//菜品的名称private double Price;//菜品的原价private String info;//菜品的其他信息
​//2.构造方法
​public Food() {}
​public Food(int id, String name, double price, String info) {this.id = id;this.name = name;Price = price;this.info = info;}
​//get/set
​
​public int getId() {return id;}
​public void setId(int id) {this.id = id;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public double getPrice() {return Price;}
​public void setPrice(double price) {Price = price;}
​public String getInfo() {return info;}
​public void setInfo(String info) {this.info = info;}
}
  • 接下来写一个菜品管理类,实现菜品的上架、下架、根据菜品编号查询菜品信息、根据菜品编号修改菜品信息、浏览全部菜品信息的功能。

public class FoodManager {//1.定义一个ArrayList集合的属性(模拟数据库,存放所有的菜品数据)private ArrayList<Food> foodList = new ArrayList<>();//为了在下面的多个方法中,能够使用键盘录入,提前把Scanner对象创建好;private Scanner sc = new Scanner(System.in);
​public FoodManager() {foodList.add(new Food(1,"鱼香豆腐",29.9,25.9,"甜辣口,嫩豆腐,招牌菜"));foodList.add(new Food(2,"尖椒🥩丝",38.9,33.9,"新鲜猪肉,自家种的新鲜蔬菜"));foodList.add(new Food(3,"麻婆豆腐",35.9,28.9,"香辣口,嫩豆腐,绝对好吃"));foodList.add(new Food(4,"蒜蓉大🦐",58.8,48.9,"新鲜活虾,色香味俱全"));foodList.add(new Food(5,"风味茄子",33.9,25.9,"自家种的新鲜蔬菜,本店招牌"));foodList.add(new Food(6,"红烧排骨",55.9,44.9,"新鲜猪肉,独家秘笈,保证好吃"));}
​//当前菜品数量int count = 6;
​//1.上架菜品(add)public void add(){System.out.println("====菜品上架====");//提前创建一个菜品对象,用于封装用户上架的菜品信息Food food = new Food();//添加时,菜品的id会根据已有的id进行判断,如果缺少,就补上,否则往后累加food.setId(getCount(count));System.out.println("请输入您想上架的菜品的名称:");food.setName(sc.next());System.out.println("请输入您想上架的菜品的原价:");food.setOriginalPrice(sc.nextDouble());System.out.println("请输入您想上架的菜品的会员价:");food.setMemberPrice(sc.nextDouble());System.out.println("请输入您想上架的菜品的信息:");food.setInfo(sc.next());
​//向菜单(集合)中添加菜品foodList.add(food);count++;//菜品加一System.out.println("恭喜您,菜品上架成功~~~");}
​//2.下架菜品(delete)public void deleteFoodById(int id){System.out.println("====菜品下架====");for (int i = 0; i < foodList.size(); i++) {Food foods = foodList.get(i);int foodsId = foods.getId();if (foodsId == id){foodList.remove(i);System.out.println("恭喜您,菜品下架成功~~~");count--;return;}}System.out.println("未找到该菜品,下架失败~~~");}
​//3.浏览全部菜品(query)public void queryAllFood(){System.out.println("====浏览全部菜品====");System.out.println("菜品的编号" + "     " + "菜品的名称" + "      " + "菜品的原价"+ "     " + "菜品的会员价" + "       " + "菜品的信息");for (int i = 0; i < foodList.size(); i++) {Food foods = foodList.get(i);System.out.println("   " + foods.getId() + "          " + foods.getName() + "         "+ foods.getOriginalPrice() + "          " + foods.getMemberPrice() + "        " + foods.getInfo());}}
​//4.根据编号查询菜品(queryByID)public void queryFoodByID(int id){System.out.println("====根据编号查询菜品====");for (int i = 0; i < foodList.size(); i++) {Food foods = foodList.get(i);int foodsId = foods.getId();if(foodsId == id){System.out.println("菜品的编号" + "     " + "菜品的名称" + "      " + "菜品的原价"+ "     " + "菜品的会员价" + "       " + "菜品的信息");System.out.println("   " + foods.getId() + "          " + foods.getName() + "         "+ foods.getOriginalPrice() + "          " + foods.getMemberPrice() + "        " + foods.getInfo());return;}}System.out.println("不存在该菜品~~");}
​//5.根据编号修改菜品(updateByID)public void updateFoodById(Food food){System.out.println("====根据编号修改菜品====");int updateId = food.getId();for (int i = 0; i < foodList.size(); i++) {Food foods = foodList.get(i);int foodsId = foods.getId();if(foodsId == updateId){foodList.set(i,food);System.out.println("恭喜您,修改菜品成功~~~");return;}}System.out.println("未找到该菜品,修改失败~~~");}
​//生成菜品编号,判断编号从1截止到菜品中存在最大编号是否都与存在,是,则再生成新的编号,即最大编号+1,若编号有缺失,则补上缺失的编号//比如,有三个菜,理应有1,2,3三个编号,但是由于删除操作可能导致只剩下编号为1,3的菜品,则需要补上2号public int getCount(int count){count = getMax();int index = 0;boolean flag = true;//判断编号从1截止到菜品中存在最大编号是否都与存在for (int id = 1; id <= count; id++) {if(!exist(id)){//如果已有菜品id中有缺少编号,则令标记flag为false,并返回缺少的idflag = false;index = id;return index;}}//如果编号不缺少,则往后继续生成if(flag){index = count + 1;}return index;}//判断集合foodList中对象是否存在和num一样的id,有返回true,否则返回falsepublic boolean exist(int num){for (int i = 0; i < foodList.size(); i++) {//获取集合中的每个对象Food food = foodList.get(i);//对象id与num比较if (food.getId() == num){return true;}}return false;}//获取对象id中的的最大id编号public int getMax(){int max = 1;for (int i = 0; i < foodList.size(); i++) {Food food = foodList.get(i);int foodId = food.getId();if(foodId > max){max = foodId;}}return max;}
​
}
  • 最后在写一个测试类FoodManagerTest,在测试类中进行测试。

public class FoodManagerTest {public static void main(String[] args) {FoodManager foodManager = new FoodManager();Scanner sc = new Scanner(System.in);while (true){System.out.println("====欢迎进入商家后台管理系统====");System.out.println("1.上架菜品(add)");System.out.println("2.下架菜品(delete)");System.out.println("3.浏览全部菜品(query)");System.out.println("4.根据编号查询菜品(queryByID)");System.out.println("5.根据编号修改菜品(updateByID)");System.out.println("6.退出系统(exit)");System.out.println("请您选择操作命令:");
​String choice = sc.next();switch (choice){case "add":foodManager.add();break;case "delete":System.out.println("请输入您想下架的菜品id:");int id = sc.nextInt();foodManager.deleteFoodById(id);break;case "query":foodManager.queryAllFood();break;case "queryByID":System.out.println("请输入您想查询的菜品id:");int id1 = sc.nextInt();foodManager.queryFoodByID(id1);break;case "updateByID":Food food = new Food();System.out.println("请输入您想修改的菜品的编号:");food.setId(sc.nextInt());System.out.println("请输入您想修改的菜品的名称:");food.setName(sc.next());System.out.println("请输入您想修改的菜品的原价:");food.setOriginalPrice(sc.nextDouble());System.out.println("请输入您想修改的菜品的会员价:");food.setMemberPrice(sc.nextDouble());System.out.println("请输入您想修改的菜品的信息:");food.setInfo(sc.next());foodManager.updateFoodById(food);break;case "exit":System.out.println("欢迎下次使用~~~");return;default:System.out.println("您输入的命令有误~~~~");}}}
}
  • 运行结果如下:需要用户输入add、delete、query、queryByID、updateByID或者exit,选择进入不同的功能。

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

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

相关文章

MapReduce入门教程

这可不是目录 入门定义与说明数据分析Map和Reduce阶段的任务<Kn,Vn>分析MapReduce的数据类型其他说明(持续更新) 开发案例(持续更新)自定义的wordcountcsv文件操作序列化操作 入门 定义与说明 数据分析 以下未数据分析示意图 Map和Reduce阶段的任务 Map阶段的任务&a…

AVL树模拟实现

目录 前言 什么叫平衡呢&#xff1f; 平衡因子 代码实现 基础结构 函数部分 构造部分 Insert函数 旋转情况(敲重点&#xff01;&#xff01;&#xff01;~\(≧▽≦)/~) 1、右右情况 ——— 左单旋 左旋总步骤 拆解 为什么叫左旋呢&#xff1f; 代码 2、左左情况 …

考研概率论如何复习最高效?能拿满分

概率论跟哪写老师的课程&#xff1f; 推荐三个老师&#xff1a; 喻老&#xff1a;基础讲的很好 喻老的线性代数课在今年已经非常有名&#xff0c;但其实他讲授的概率论课程同样十分出色。喻老的课程特点在于讲解非常细致&#xff0c;特别适合基础较为薄弱的学生。此外&#…

如何评估一个APP是否适合进行ASO优化呢

ASO&#xff08;App Store Optimization&#xff09;优化是提升APP在各类应用商店排行榜和搜索结果排名的过程。那么怎么评估一个APP是否适合进行ASO优化呢&#xff0c;可以从以下几个方面进行考量&#xff1a; 一、市场竞争情况 1.行业竞争激烈程度 首先分析APP所在行业的竞…

python媒体下载工具 you-get

you-get 是一个基于 Python 3 的强大的命令行工具&#xff0c;使用方式简单&#xff0c;使用 you-get 可以很轻松的下载到网络上的各种媒体文件&#xff08;视频、图片及音乐等&#xff09;。 相关功能和配置选项&#xff0c;可以查阅以下以获取详细信息&#xff1a; GitHub 官…

Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)

前言 我本来老老实实的写着我的Shader&#xff0c;群里的小伙伴强烈建议我开始讲ASE&#xff0c;我只能说&#xff0c;我是一个听话的Up。 一、什么是ASE 全称AmplifyShaderEditor&#xff0c;是一个unity插件&#xff0c;存在于unity商城中&#xff0c;售价看他们心情。&am…

Spring中WebSocket的使用

文章目录 前言什么是 WebSocketWebSocket 协议和 HTTP 协议的区别WebSocket 原理解析WebSocket 报文格式 Spring 中 WebSocket 的使用前后端发送的数据的数据类型是对象该如何做使用websocket协议如何获取到HTTP协议中的HttpSession WebSocket使用的完整代码 前言 我们在使用 …

Pixel Adventure Unity2D开发完整指南

本文参考&#xff1a;2-2. Get and Setup Assets_哔哩哔哩_bilibili 1、下载资源 在Asset Store中下载Pix Adventure1 2的资源&#xff1a; 在import的时候&#xff0c;不用到Scene import进来&#xff0c;如下图所示&#xff0c;Scenes目录反勾选一下。 两个资源都下载完成后…

Unity 使用 NewtonSoft Json插件报错

JsonReaderException: Unexpected character encountered while parsing value: . Path , line 0, position 0. 通过断点发现&#xff0c;头有一串ZWNBSP&#xff0c;这个是BOM格式的JSON。在文件下看不到。 解决方法&#xff1a;改编码格式&#xff0c;Remove BOM.

(回溯) LeetCode 51. N 皇后

原题链接 一. 题目描述 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后…

腾讯云AI代码助手:智能AI代码助手 ,新一代的高效代码开发辅助工具

前言 近些年是一个科技大爆发的时代&#xff0c;自从大模型发布以来越来越多的科技产品出现。例如去年的智能编码助手自出现以来&#xff0c;各大老牌大厂腾讯&#xff0c;百度 阿里也都紧随其后&#xff0c;智能编码助手的出现可以说大大的节省了我们写一些冗余代码的时间成本…

十七、访问者模式

文章目录 1 基本介绍2 案例2.1 Element 接口2.2 Vehicle 抽象类2.3 Car 类2.4 Jeep 类2.5 VehicleCollection 类2.6 Action 抽象类2.7 Repair 类2.8 Drive 类2.9 Client 类2.10 Client 类的运行结果2.11 总结 3 各角色之间的关系3.1 角色3.1.1 Element ( 元素 )3.1.2 ConcreteE…

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…

LVS 调度器 nat和DR模式

lvs-nat 修改请求报文的目标IP,多目标IP的DNAT 配置网络 LVS主机 注意网卡的顺序 &#xff08;nat和主机模式&#xff09; [rootlvs ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 typeethernet interface-nameens160 ​ [ip…

Linux使用学习笔记3 系统运维监控基础

系统运维监控类命令 查询每个进程的线程数 for pid in $(ps -ef | grep -v grep|grep "systemd" |awk {print $2});do echo ${pid} > /tmp/a.txt;cat /proc/${pid}/status|grep Threads > /tmp/b.txt;paste /tmp/a.txt /tmp/b.txt;done|sort -k3 -rn for pid…

数据结构与算法-16高级数据结构_图论(图论基础)

图论基础 1 什么是图 1.1 基础定义 图&#xff08;Graph&#xff09;是一个用于描述一组对象之间关系的数学结构。这些对象被称为顶点&#xff08;Vertex&#xff09;&#xff0c;也称为节点&#xff08;Node&#xff09;或点&#xff08;Point&#xff09;&#xff0c;而对…

2024国赛Word论文模板【一键生成式操作】

一、比赛介绍 该竞赛创办于1992年&#xff0c;每年一届&#xff0c;是首批列入“高校学科竞赛排行榜”的19项竞赛之一。2023年&#xff0c;来自全国及美国、澳大利亚、马来西亚的1685所院校/校区、59611队(本科54158队、专科5453队)、近18万人报名参赛。 而今年的国赛马上就要…

【CTF | WEB】001、攻防世界WEB题目之backup

文章目录 backup题目描述:解题思路&#xff1a;解题过程&#xff1a; backup 题目描述: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 进入题目后显示&#xff1a; 解题思路&#xff1a; 在进行网站安全检查时&#xf…

网络协议四 物理层,数据链路层

从这一节开始学习 五层模型。学习方法是从最底层物理层开始学习 七层模型 五层模型 各个层用的协议&#xff0c;以及加上协议后的称谓 各个层的作用 应用层&#xff1a;可以认为是原始数据&#xff0c;该数据称为 报文&#xff0c;用户数据。 运输层&#xff1a;也叫传输层&am…

全网超详细攻略——LVS原理详解及部署

目录 一、LVS原理 1.LVS简介 2.LVS结构 3.IP负载均衡技术 4.LVS相关术语 二、LVS负载均衡四种工作模式 1.LVS-DR模式 2.LVS-NAT模式 3.LVS-TUN模式&#xff08;了解&#xff09; 4.FULL-NAT模式&#xff08;了解&#xff09; 三、LVS负载均衡十种调度算法 四、LVS部…