欢迎光临
我们一直在努力

Java ArrayList操作实战:存储遍历与对象管理

题目一:Java ArrayList 存储与遍历字符串元素训练

一、题目分析

核心需求:

将字符串数组 ["aaa", "bbb", "aaa", "aaa", "ccc", "bbb"] 按顺序存入 ArrayList 集合,并遍历集合查看结果。

考察知识点:

  • ArrayList 泛型的定义与使用
  • ArrayList 集合的 add() 方法(添加元素)
  • ArrayList 集合的遍历方式(索引循环 + get() 方法)
  • 集合与数组的基础数据存储逻辑

解题步骤:

步骤 1:准备工作 – 导入 ArrayList 类(必做)

java

运行

import java.util.ArrayList;

  • 目的:ArrayList 不是 Java 默认的基础类(属于 java.util 工具包),必须通过 import 导入才能使用。
  • 易错点:新手容易忘记导入,会报 找不到符号 编译错误。
  • 补充:如果不想写 import,也可以用全类名 java.util.ArrayList 定义集合(但不推荐,代码冗余)。
步骤 2:创建主类和主方法(程序入口)

java

运行

public class ArrayListDemo {
public static void main(String[] args) {
// 核心代码写在这里
}
}

  • 目的:Java 程序必须以类为载体,main 方法是程序的唯一入口(固定格式:public static void main(String[] args))。
  • 细节:类名 ArrayListDemo 要符合 Java 命名规范(大驼峰,首字母大写)。
步骤 3:创建 ArrayList 集合对象(核心)

java

运行

ArrayList<String> list = new ArrayList<>();

  • 目的:在内存中开辟一块空间,用于存储后续的字符串元素。
  • 语法拆解:
    • ArrayList<String>:声明一个泛型为 String的 ArrayList 类型变量 list,限定这个集合只能存字符串,不能存数字、对象等其他类型(泛型的作用:类型安全,避免运行时类型转换错误)。
    • new ArrayList<>():JDK 7+ 支持的 “菱形语法”,右侧无需重复写 <String>,编译器会自动推断。
  • 对比(新手易混):
    • 错误写法:ArrayList list = new ArrayList();(无泛型,会有编译警告,且取出元素时需要强制类型转换)。
    • 正确写法(JDK 7-):ArrayList<String> list = new ArrayList<String>();(完整泛型声明)。
步骤 4:向集合中添加元素(核心)

java

运行

list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aaa");
list.add("ccc");
list.add("bbb");

  • 目的:将指定字符串依次存入 list 集合中。
  • 方法说明:add(E e) 是 ArrayList 的核心方法,作用是在集合末尾追加元素(有序存储的体现)。
  • 细节:
    • 每次调用 add,集合的长度(size)会自动 + 1(ArrayList 是动态数组,无需手动指定长度,这是和数组的核心区别)。
    • 元素存入顺序:第一个 add("aaa") 是集合的第 1 个元素(索引 0),最后一个 add("bbb") 是第 6 个元素(索引 5)。
  • 验证小技巧:添加完所有元素后,可通过 System.out.println(list.size()); 输出集合长度,结果应为 6。
步骤 5:遍历集合并输出元素(核心)

java

运行

for (int i = 0; i < list.size(); i++) {
String element = list.get(i);
System.out.println("索引" + i + ":" + element);
}

  • 目的:按顺序取出集合中的每一个元素并打印,验证存储结果。
  • 语法拆解:
  • 循环条件 i < list.size():size() 方法返回集合的元素个数(此处为 6),索引从 0 开始,所以循环到 i=5 为止(避免数组下标越界异常)。
  • list.get(i):根据索引 i 获取对应位置的元素,返回值类型为 String(因为泛型限定)。
  • 打印语句:同时输出索引和元素,方便核对顺序。
  • 易错点:
    • 循环条件写成 i <= list.size():会导致 IndexOutOfBoundsException(索引越界),因为最大索引是 size()-1。
    • 忘记接收 get() 的返回值:直接 System.out.println(list.get(i)); 也可以,只是拆分出来更易读。
步骤 6:运行程序,查看结果

最终输出:

plaintext

索引0:aaa
索引1:bbb
索引2:aaa
索引3:aaa
索引4:ccc
索引5:bbb

  • 结果分析:输出顺序和添加顺序完全一致,验证了 ArrayList有序、可重复的特性("aaa" 和 "bbb" 重复出现,集合允许)。

二、完整代码示例

package com.sy.homework;

import java.util.ArrayList;

public class Test01 {
public static void main(String[] args) {
/**
* 现有如下字符串元素:["aaa", "bbb", "aaa", "aaa", "ccc", "bbb"]
* 请将所有的元素按顺序存入ArrayList集合中,并遍历集合查看存储结果。
*/
// 1.创建集合
ArrayList<String> list = new ArrayList<>();
// 2. 将字符串存储到list集合中
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aaa");
list.add("ccc");
list.add("bbb");

// 普通for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// // 增强for循环 (暂时了解 以后经常用)
// for (String s : list){
// System.out.println(s);
// }
}
}

三、最后总结

这道题是 Java 集合入门的基础练习,核心是掌握 ArrayList 的创建、元素添加与索引遍历 三个核心操作。通过练习可以理解:

  • ArrayList 是有序可重复的集合,能保持元素存入的顺序
  • 泛型 <String> 限定了集合只能存储字符串类型,避免类型转换异常
  • 索引遍历是 ArrayList 最基础的遍历方式,适合需要操作下标的场景

题目二:Java ArrayList 存储自定义 Teacher 对象并遍历输出训练

一、题目分析与解题思维

1. 题目核心需求
  • 定义 Teacher 类,包含姓名和专业名称两个属性。
  • 创建多个 Teacher 对象,存入 ArrayList 集合。
  • 遍历集合,按指定格式打印教师信息:姓名:X老师,专业:xxx。
2. 考察知识点
  • 自定义 Java 类的封装(属性、构造方法、getter/setter)。
  • ArrayList 泛型的使用(泛型为自定义类 Teacher)。
  • 自定义对象的添加与集合遍历。
  • 对象信息的格式化输出(不能直接打印对象,需访问属性拼接)。

3. 解题思维拆解

步骤 1:定义 Teacher 类
  • 封装属性:private String name;(姓名)、private String major;(专业)。
  • 提供构造方法:用于创建对象时初始化姓名和专业。
  • 提供 getter 方法:用于外部访问私有属性(因为属性是 private 修饰)。
  • (可选)重写 toString() 方法:方便直接打印对象时输出格式化信息。
步骤 2:创建 ArrayList 集合
  • 泛型声明为 ArrayList<Teacher>,限定集合只能存储 Teacher 类型对象,保证类型安全。
  • 示例:ArrayList<Teacher> teacherList = new ArrayList<>();
步骤 3:添加教师对象到集合
  • 创建多个 Teacher 实例

  • 调用 add() 方法将对象依次添加到集合:
步骤 4:遍历集合格式化输出
  • 遍历方式:使用 for 循环(索引遍历)或增强 for 循环。
  • 关键:不能直接打印对象,需通过 getName() 和 getMajor() 获取属性,拼接成指定格式:

二、完整代码示例

package com.sy.homework;

import com.sy.pojo.Teacher;

import java.util.ArrayList;

public class Test02 {
public static void main(String[] args) {
/**
* 请定义教师(Teacher)类,属性包含姓名和专业名称
* 将若干教师对象存入ArrayList集合中,并遍历集合打印教师信息
* 格式如下:
* 姓名:赵老师, 专业:javase
* 姓名:钱老师, 专业:javaee
* 姓名:孙老师, 专业:php
* 姓名:李老师, 专业:python
*/
// 1.创建集合
ArrayList<Teacher> list = new ArrayList<>();
// 2.创建对象并赋值
Teacher t1 = new Teacher("孟院长", "全栈Java开发工程师");
Teacher t2 = new Teacher("翟老师", "全栈Java开发工程师");
Teacher t3 = new Teacher("王老师", "UI设计师");
Teacher t4 = new Teacher("李老师", "天书");
// 3.将对象信息添加到集合中
list.add(t1);
list.add(t2);
list.add(t3);
list.add(t4);
// 4.遍历
for (int i = 0; i < list.size(); i++) {
Teacher teacher = list.get(i);
System.out.println("姓名:"+ teacher.getName()+", 专业:"+teacher.getCourse());
}
}
}

三、最后总结

这道题是 ArrayList 存储自定义对象 的典型入门练习,核心是理解:

  • 自定义类是基础:先封装数据,才能创建对象存入集合。
  • 泛型的作用:ArrayList<Teacher> 确保集合只存指定类型对象,避免类型转换错误。
  • 对象访问规则:私有属性必须通过 getter 方法获取,不能直接访问。
  • 遍历与输出:遍历集合时,需逐个取出对象,再访问其属性拼接成要求的格式。
  • 题目三:Java ArrayList 员工信息集合的修改、删除与查询操作训练

    一、题目分析与解题思维

    1. 题目核心需求
    • 定义员工(Employee)类,封装姓名、工资属性。
    • 将 5 名员工对象存入 ArrayList<Employee> 集合。
    • 完成三个核心操作:
    • 查找姓名为 “王五” 的员工,修改姓名为 “王小五”;
    • 删除姓名为 “赵六” 的员工;
    • 查找姓名为 “田七” 的员工,给其涨 500 工资。
    2. 考察知识点
    • 自定义类的封装(属性、构造器、getter/setter)。
    • ArrayList 核心 API:get(int index)(取值)、set(int index, E element)(修改)、remove(int index/Object obj)(删除)。
    • 集合遍历与条件判断(equals 字符串比较)。
    • 遍历删除元素的避坑技巧(避免并发修改异常、下标越界)。
    3. 解题思维拆解

    步骤 1:定义 Employee 员工类

    • 封装私有属性:private String name;、private double salary;。
    • 生成构造方法(初始化姓名、工资)、getter/setter 方法(获取 / 修改属性)。
    • (可选)重写 toString(),方便后续打印员工信息调试。

    步骤 2:初始化 ArrayList 集合并存入员工对象

    • 定义泛型为 ArrayList<Employee>,确保集合只存员工类型对象。
    • 调用 add() 方法,依次创建 5 个员工对象并添加到集合:

      java

      运行

      ArrayList<Employee> empList = new ArrayList<>();
      empList.add(new Employee("张三", 3000));
      empList.add(new Employee("王五", 4000));
      // 依次添加剩余员工

    步骤 3:实现 “修改姓名” 操作(王五→王小五)

    • 遍历集合,逐个对比员工姓名:
      • 遍历方式:普通 for 循环(需通过下标操作,更灵活)。
      • 条件判断:使用 equals() 比较姓名("王五".equals(emp.getName()))。
      • 找到目标后:通过 setName() 修改姓名,或直接通过下标用 set() 方法替换对象(empList.set(index, new Employee("王小五", 原工资)))。

    步骤 4:实现 “删除员工” 操作(删除赵六)

    • 核心思维:遍历删除时不能直接用增强 for 循环(会抛并发修改异常),优先用普通 for 循环倒序遍历,或找到下标后删除。
    • 步骤:
    • 遍历集合查找 “赵六”;
    • 记录其下标 index;
    • 调用 empList.remove(index) 删除(按下标删除效率更高);
    • 注意:删除元素后集合长度会变化,正序遍历需注意下标越界(推荐倒序遍历)。

    步骤 5:实现 “涨工资” 操作(田七 + 500)

    • 遍历集合,对比姓名找到 “田七”;
    • 调用 getSalary() 获取原工资,加 500 后用 setSalary() 重新赋值。

    二、完整代码示例

    public class Worker {
        private String name;
        private int salary;

        public Worker() {
        }

        public Worker(String name, int salary) {
            this.name = name;
            this.salary = salary;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getSalary() {
            return salary;
        }

        public void setSalary(int salary) {
            this.salary = salary;
        }
    }

    import java.util.ArrayList;

    public class Test03 {
        public static void main(String[] args) {
            // 创建集合对象
            ArrayList<Worker> list = new ArrayList<>();
            // 创建员工对象并添加到集合中
            list.add(new Worker("张三", 2000));
            list.add(new Worker("李四", 2500));
            list.add(new Worker("王五", 3000));
            list.add(new Worker("赵六", 3500));
            list.add(new Worker("田七", 4000));
            // 判断是否有王五,如果有,改名为王小五
            // 判断是否有赵六,如果有,删除赵六
            // 给田七加500块工资
            for (int i = 0; i < list.size(); i++) {
                Worker w = list.get(i);
                if ("王五".equals(w.getName())) {
                    w.setName("王小五");
                    list.set(i, w);
                }
                if ("赵六".equals(w.getName())) {
                    // 注意,一旦删除元素,后面的元素会往前走,索引再加1就会有元素遗漏,所以删除后要–
                    list.remove(i–);
                }
                if ("田七".equals(w.getName())) {
                    w.setSalary(w.getSalary() + 500);
                    list.set(i, w);
                }
            }
            // 再次遍历查看结果
            for (int i = 0; i < list.size(); i++) {
                Worker w = list.get(i);
                System.out.println(w.getName() + "—" + w.getSalary());
            }
        }
    }

    三、最后总结

    这道题是 ArrayList 实战操作的核心训练,核心思维与要点如下:

  • 封装是基础:先定义员工类,才能将零散的员工信息封装为对象,实现集合的有序存储。
  • API 区分要清晰:
    • 修改用 set(int index, 新对象);
    • 删除用 remove(int index)(按下标)或 remove(Object obj)(按对象);
    • 取值用 get(int index)。
  • 遍历删除避坑:增强 for 循环遍历中直接删除元素会抛 ConcurrentModificationException,因为遍历过程中集合结构发生变化。解决办法:
    • 用普通 for 循环倒序遍历删除(避免下标错位);
    • 先记录待删除元素的下标,遍历结束后再删除。
  • 字符串比较必用 equals:Java 中比较字符串内容必须用 equals(),绝不能用 ==,否则会因地址值比较导致判断错误。
  • 赞(0)
    未经允许不得转载:171主机测评 » Java ArrayList操作实战:存储遍历与对象管理
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址