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

七、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入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。现在用户不想买枸杞了,选择了批量删除,请完成该需求。

分析:

  1. 后台使用ArrayList集合表示购物车,存储这些商品名。
  2. 遍历集合中的每个数据,只要这个数据包含了“枸杞”则删除它。
  3. 输出集合看是否已经成功删除了全部枸杞数据了。
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个需求。

分析需求发现:

  1. 在外卖系统中,每一份菜都包含,菜品的名称、菜品的原价、菜品的优惠价、菜品的其他信息。那我们就可以定义一个菜品类(Food类),用来描述每一个菜品对象要封装那些数据。
  2. 接着再写一个菜品管理类(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();
    }
}

运行结果:


http://www.kler.cn/a/549033.html

相关文章:

  • 使用 DeepSeek 生成商城流程图
  • Flutter 打包报错:Execution failed for task ‘:flutter_plugin_android_lifecycle的解决办法
  • AI、Java、C++、C#等技术学习资源链接汇总
  • HarmonyOS NEXT网络状态监听HTTP和RCP请求网络
  • java集合一张图理解
  • 蓝桥杯 Java B 组之简单动态规划(爬楼梯、斐波那契数列)
  • 大数据SQL调优专题——Hive执行原理
  • 设计模式与面向对象的 11 个致命陷阱
  • Java语言介绍
  • 四、敏捷方法论:敏捷开发中的关键实践
  • Python爬虫入门:从数据海洋中获取宝藏
  • Spring Boot02(数据库、Redis)---java八股
  • IDEA通过Contince接入Deepseek
  • 深度学习训练camp-第R3周:RNN-心脏病预测
  • 腿足机器人之六- 前向运动学
  • OpenCV的主要模块
  • golang字符串拼接实现方式和比较
  • 跟着李沐老师学习深度学习(十)
  • 2.16刷题记录
  • Leetcode 2466. Count Ways To Build Good Strings