当前位置: 首页 > news >正文

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,选择进入不同的功能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue使用富文本编辑器+自由伸缩图片
  • 在Linux下编译安装Python3.10.0及以上环境(解决了openssl依赖问题)
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级
  • git update-git-for-windows 升级失败
  • django项目中通用的分页组件
  • 【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践
  • Unity游戏开发
  • unity 本地使用Json(全套)
  • JMeter常见的高频面试题整理
  • RCE漏洞函数
  • RCE漏洞复现
  • 入门岛2-python实现wordcount并进行云端debug
  • git中如何修改提交信息(版本号)
  • Linux系统安全及应用(一):密码安全、命令历史限制、终端自动注销、su命令和限制su命令
  • 停止项目大小调整,开始搜索层自动缩放!
  • conda常用的命令
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES6简单总结(搭配简单的讲解和小案例)
  • exif信息对照
  • java8-模拟hadoop
  • JavaScript创建对象的四种方式
  • Linux各目录及每个目录的详细介绍
  • Mac转Windows的拯救指南
  • PAT A1017 优先队列
  • Python连接Oracle
  • rabbitmq延迟消息示例
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 爱情 北京女病人
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 电商搜索引擎的架构设计和性能优化
  • 分享一份非常强势的Android面试题
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 一些css基础学习笔记
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Semaphore
  • ​Java基础复习笔记 第16章:网络编程
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #ifdef 的技巧用法
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $.proxy和$.extend
  • (MATLAB)第五章-矩阵运算
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (规划)24届春招和25届暑假实习路线准备规划
  • (生成器)yield与(迭代器)generator
  • (五)网络优化与超参数选择--九五小庞
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)JAVA中的堆栈
  • (转载)深入super,看Python如何解决钻石继承难题
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net dataexcel 脚本公式 函数源码
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 使用 SpanT 为字符串处理提升性能