七、Java常用API(2)
一、 ArrayList快速入门
学习完String类之后,接下来再学习一个类——叫ArrayList。
ArrayList表示一种集合,它是一个容器,用来装数据的,类似于数组。那有了数组,为什么要有集合呢?
因为数组一旦创建大小不变,比如创建一个长度为3的数组,就只能存储3个元素,想要存储第4个元素就不行。而集合是大小可变的,想要存储几个元素就存储几个元素,在实际工作中用得更多。
然后集合有很多种,而ArrayList只是众多集合中的一种。如下图所示:
集合该怎么学呢?
1. 首先你要会创建集合对象,
2. 然后能够调用集合提供的方法对容器中的数据进行增删改查,
3. 最后知道集合的一些特点就可以了。
(一) ArrayList常用方法
想要使用ArrayList存储数据,并对数据进行操作:
- 第一步:创建ArrayList容器对象。一般使用空参数构造方法,如下图所示:
- 第二步:调用ArrayList类的常用方法对容器中的数据进行操作。常用方法如下:
(二) 快速熟悉 ArrayList 集合的常用方法
package nuyoah.arraylist;
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
// 目标:掌握ArrayList集合的创建和使用。
// 1、创建ArrayList集合的对象代表一个容器(大小可变,数据可以重复,有索引)
// ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list = new ArrayList<>(); // JDK7之后后面类型可以不写
list.add("java1");
list.add("java1");
list.add("金庸");
// list = [java1, java1, 金庸]
System.out.println(list);
// 2、插入数据
list.add(1, "嵌入式");
System.out.println(list);
// 3、根据索引获取数据 :list = [java1, 嵌入式, java1, 金庸]
// 0 1 2 3
String ele = list.get(3);
System.out.println(ele);
// 4、获取集合的大小(元素个数)
System.out.println("集合的元素个数:" + list.size());
// 5、根据索引删除数据,返回被删除的数据。
System.out.println(list.remove(1));
System.out.println(list);
// 6、直接删除数据,返回真假 , 默认只能删除第一个出现的。
System.out.println(list.remove("java1"));
System.out.println(list);
// 7、修改某个索引位置处的数据,返回修改前的数据 list = [java1, 金庸]
System.out.println(list.set(1, "古龙"));
System.out.println(list);
}
}
二、ArrayList应用案例
(一) 掌握从容器中找出某些数据并成功 v
需求:
现在假如购物车中存储了如下这些商品:Jva入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。现在用户不想买枸杞了,选择了批量删除,请完成该需求。
分析:
- 后台使用ArrayList集合表示购物车,存储这些商品名。
- 遍历集合中的每个数据,只要这个数据包含了“枸杞”则删除它。
- 输出集合看是否已经成功删除了全部枸杞数据了。
package nuyoah.arraylist;
import java.util.ArrayList;
/**
* @Project_Name: ArrayListDemo2.java
* @Author: Natural Pride
* @Date: 2025/2/15 18:00
* @Description:TODO
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
// 目标:掌握从容器中删除数据的技巧。
// 1、准备一个集合,存储一堆商品
ArrayList<String> list = new ArrayList<>();
list.add("Java入门");
list.add("宁夏枸杞");
list.add("黑枸杞");
list.add("人字拖");
list.add("特技枸杞");
list.add("枸杞子");
System.out.println(list);
// list = [Java入门, 宁夏枸杞, 黑枸杞, 人字拖, 特技枸杞, 枸杞子]
// list = [Java入门, 宁夏枸杞, 黑枸杞, 人字拖, 特技枸杞, 枸杞子]
// i
// 遍历集合中的每个数据,只要这个数据包含枸杞,我们就从集合中删除这个数据。
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
if(name.contains("枸杞")) {
// 从集合中直接干掉这个数据
list.remove(name);
i--; // 解决方案一:删完数据后回退一步,才可以保证成功删除数据,不会漏删
}
}
System.out.println(list);
System.out.println("==================");
ArrayList<String> list2 = new ArrayList<>();
list2.add("Java入门");
list2.add("宁夏枸杞");
list2.add("黑枸杞");
list2.add("人字拖");
list2.add("特技枸杞");
list2.add("枸杞子");
// 解决方案二:从后面倒着遍历并删除就没有问题了。
// list2 = [Java入门, 宁夏枸杞, 黑枸杞, 人字拖, 特技枸杞, 枸杞子]
// list2 = [Java入门, 人字拖]
// i
for (int i = list2.size() - 1; i >= 0; i--) {
String name = list2.get(i);
if(name.contains("枸杞")) {
// 从集合中直接干掉这个数据
list2.remove(name);
}
}
System.out.println(list2);
}
}
运行结果
(二) ArrayList的综合案例-模仿外卖系统中的商家系统
需求:完成菜品的上架、以及菜品信息浏览功能。
目标:使用所学的ArrayList集合结合面向对象编程实现以上2个需求。
分析需求发现:
- 在外卖系统中,每一份菜都包含,菜品的名称、菜品的原价、菜品的优惠价、菜品的其他信息。那我们就可以定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。
- 接着再写一个菜品管理类(FoodManager类),提供展示操作界面、上架菜品、浏览菜品的功能。
- 首先我们先定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。
package nuyoah.arraylist.comCase;
/**
* @Project_Name: Food.java
* @Author: Natural Pride
* @Date: 2025/2/15 17:09
* @Description:TODO 菜单类
*/
public class Food {
private String name;
private double price;
private String desc; // 描述
public Food() {
}
public Food(String name, double price, String desc) {
this.name = name;
this.price = price;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
- 接下来写一个菜品管理类,提供上架菜品的功能、浏览菜品的功能、展示操作界面的功能
package nuyoah.arraylist.comCase;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @Project_Name: FoodOperator.java
* @Author: Natural Pride
* @Date: 2025/2/15 17:09
* @Description:TODO 菜品操作类
*/
public class FoodOperator {
// 1、准备一个容器负责存储上架的全部菜品。
// private int id = 1; 与下面变量定义原理相同
private ArrayList<Food> allFoods = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
public void addFood() {
System.out.println("==============上架菜品==============");
// a、用户每上架一次菜品实际上就是在集合中新增一个菜品对象。
Food f = new Food();
// b、为菜品对象注入菜品的数据。
System.out.println("菜品名称:");
String name = sc.next();
f.setName(name);
System.out.println("菜品价格:");
double price = sc.nextDouble();
f.setPrice(price);
System.out.println("菜品描述:");
String desc = sc.next();
f.setDesc(desc);
// c、把菜品对象添加到集合容器中去。
allFoods.add(f);
System.out.println("菜品上架成功!");
}
public void removeFood() {
System.out.println("请输入要下架的菜品名称:");
String name = sc.next();
for (int i = 0; i < allFoods.size(); i++) {
if(allFoods.get(i).getName().equals(name)) {
// 找到了,删除
allFoods.remove(i);
break;
}
}
}
public void showAllFoods() {
System.out.println("==============全部菜品==============");
for (int i = 0; i < allFoods.size(); i++) {
Food food = allFoods.get(i);
System.out.println(food.getName() + "\t" + food.getPrice() + "\t" + food.getDesc());
}
}
public void start() {
while (true) {
System.out.println("=============商家管理系统=============");
System.out.println("1、上架菜品");
System.out.println("2、下架菜品(作业)");
System.out.println("3、展示菜品");
System.out.println("请您输入操作功能“:");
int command = sc.nextInt();
switch (command) {
case 1:
// 上架: 独立功能独立成方法
addFood();
break;
case 2:
// 下架
removeFood();
break;
case 3:
// 展示
showAllFoods();
break;
default:
System.out.println("输入错误!");
}
}
}
}
最后在写一个测试类进行测试
package nuyoah.arraylist.comCase;
/**
* @Project_Name: ArrayListTest3.java
* @Author: Natural Pride
* @Date: 2025/2/15 17:44
* @Description:TODO
*/
public class ArrayListTest3 {
public static void main(String[] args) {
// 目标:完成菜品上架,浏览功能。结合面向对象编程和ArrayList.
// 1、每个菜品是一个对象,定义菜品类,用于创建菜品对象封装菜品数据。
// 2、定义一个菜品操作类,用于创建菜品操作对象负责对菜品数据进行业务处理。
FoodOperator operator = new FoodOperator();
operator.start();
}
}
运行结果: