七、Java常用API(2)

一、 ArrayList快速入门

学习完String类之后,接下来再学习一个类------叫ArrayList。

ArrayList表示一种集合,它是一个容器,用来装数据的,类似于数组。那有了数组,为什么要有集合呢?

因为数组一旦创建大小不变,比如创建一个长度为3的数组,就只能存储3个元素,想要存储第4个元素就不行。而集合是大小可变的,想要存储几个元素就存储几个元素,在实际工作中用得更多。

然后集合有很多种,而ArrayList只是众多集合中的一种。如下图所示:

集合该怎么学呢?

  1. 首先你要会创建集合对象,

  2. 然后能够调用集合提供的方法对容器中的数据进行增删改查,

  3. 最后知道集合的一些特点就可以了。

(一) ArrayList常用方法

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

  • 第一步:创建ArrayList容器对象。一般使用空参数构造方法,如下图所示:
  • 第二步:调用ArrayList类的常用方法对容器中的数据进行操作。常用方法如下:

(二) 快速熟悉 ArrayList 集合的常用方法

java 复制代码
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. 输出集合看是否已经成功删除了全部枸杞数据了。
java 复制代码
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类),用来描述每一个菜品对象要封装那些数据。
java 复制代码
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;
    }
}
  • 接下来写一个菜品管理类,提供上架菜品的功能、浏览菜品的功能、展示操作界面的功能
java 复制代码
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("输入错误!");
            }
        }
    }

}

最后在写一个测试类进行测试

java 复制代码
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();
    }
}

运行结果:

相关推荐
掘金-我是哪吒12 分钟前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪38 分钟前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm41 分钟前
spring事件使用
java·后端·spring
微风粼粼1 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄1 小时前
设计模式之中介者模式
java·设计模式·中介者模式
rebel2 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温3 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2743 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba3 小时前
Maven
java·maven
张人玉3 小时前
C# 常量与变量
java·算法·c#