题目一: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 存储自定义对象 的典型入门练习,核心是理解:
题目三: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 实战操作的核心训练,核心思维与要点如下:
- 修改用 set(int index, 新对象);
- 删除用 remove(int index)(按下标)或 remove(Object obj)(按对象);
- 取值用 get(int index)。
- 用普通 for 循环倒序遍历删除(避免下标错位);
- 先记录待删除元素的下标,遍历结束后再删除。



