一、实验实训目的和要求
1、掌握List集合对象的创建
2、掌握基于集合的元素添加、元素查询、元素删除、遍历集合等操作
3、掌握集合在项目功能中的应用
4、通过实验体会集合的灵活应用
3.1 计算机设备
操作系统:建议使用 Windows或 macOS 等主流操作系统,确保系统稳定且已安装 Java 开发环境(JDK),JDK 版本建议为Java8、Java 17 或Java 21。
处理器:具备基本的计算处理能力,能够流畅运行 Java 程序。一般来说,普通的笔记本电脑或台式机处理器均可满足需求,如英特尔酷睿系列或 AMD 锐龙系列处理器。
内存:至少 8GB 及以上的内存,以保证在编译和运行 Java 程序时系统不会因内存不足而出现卡顿或异常。
3.2 开发工具
集成开发环境(IDE):推荐使用 IntelliJ IDEA专业的 Java 开发工具,这些 IDE 提供了代码编辑、编译、调试等功能,能够极大地提高开发效率。当然,也可以使用简单的文本编辑器(如 Notepad++、Sublime Text 等)结合命令行工具进行 Java 开发,但对开发者的要求相对较高。
Java 开发工具包(JDK):作为 Java 开发的核心工具包,包含了 Java 编译器(javac)、Java 运行时环境(JRE)等必要的工具和库。确保 JDK 已正确安装并配置好环境变量,以便在命令行或 IDE 中能够正常使用 Java 相关命令。
3.3 其他辅助工具
文档编辑器:用于记录实验过程、回答思考题等,如 Microsoft Word、WPS 文字处理软件等。
截图工具:用于截取程序代码和运行结果图。
三、实验实训内容和主要操作步骤
2.1 验证性实验
1、List编程:创建一个工人类,属性:姓名、年龄、工资,要求如下:
类结构验证:检查 Worker 类是否正确定义了私有属性(姓名、年龄、工资),验证是否提供了无参和有参构造方法,确认所有属性都有对应的 getter 和 setter 方法。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| public class Worker { // 私有属性 private String name; private int age; private double salary; // 无参构造方法 public Worker() {} // 有参构造方法 public Worker(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } // get/set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } // 重写toString方法,方便打印工人信息 @Override public String toString() { return "姓名:" + name + ",年龄:" + age + ",工资:" + salary; } } |
2、功能验证:
- 程序应能正确创建多个 Worker 对象并存储在 List 集合中
- 能完整打印所有工人的信息
- 平均工资计算应准确无误
- 姓名包含 "胡" 的查询应正确(包含中间或结尾有 "胡" 字的情况)
- 姓 "胡" 的查询应只返回以 "胡" 字开头的工人
- 键盘输入一个姓名,查找是否存在此员工,存在,则打印输出员工的信息,如果不存在,则输出"查无此人"。
- 输入一个工资,查询工资 大于 输入工资的员工信息。
代码如下,请验证上述问题相关功能。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class WorkerTest { public static void main(String[] args) { // (2) 创建多个Worker类,存储在List集合中 List<Worker> workers = new ArrayList<>(); workers.add(new Worker("张三", 30, 5000)); workers.add(new Worker("胡四", 28, 6000)); workers.add(new Worker("王五", 35, 7000)); workers.add(new Worker("胡六六", 40, 8000)); workers.add(new Worker("赵七", 25, 4500)); workers.add(new Worker("胡八一", 38, 9000)); // (3) 打印输出所有的工人信息 System.out.println("(3) 所有工人信息:"); for (Worker worker : workers) { System.out.println(worker); } // (4) 计算所有工人的平均工资 double totalSalary = 0; for (Worker worker : workers) { totalSalary += worker.getSalary(); } double avgSalary = totalSalary / workers.size(); System.out.println("所有工人的平均工资:" + avgSalary); // (5) 打印输出姓名中包含 "胡" 的所有工人信息 System.out.println("姓名中包含'胡'的工人信息:"); for (Worker worker : workers) { if (worker.getName().contains("胡")) { System.out.println(worker); } } // (6) 打印输出所有姓 "胡" 的工人信息 System.out.println("姓'胡'的工人信息:"); for (Worker worker : workers) { if (worker.getName().startsWith("胡")) { System.out.println(worker); } } // (7) 键盘输入一个姓名,查找是否存在此员工 Scanner scanner = new Scanner(System.in); System.out.println("请输入要查找的姓名:"); String searchName = scanner.nextLine(); boolean found = false; for (Worker worker : workers) { if (worker.getName().equals(searchName)) { System.out.println("找到该员工:" + worker); found = true; break; } } if (!found) { System.out.println("查无此人"); } // (8) 输入一个工资,查询工资大于输入工资的员工信息 System.out.println("请输入一个工资:"); double searchSalary = scanner.nextDouble(); System.out.println("工资大于" + searchSalary + "的员工信息:"); for (Worker worker : workers) { if (worker.getSalary() > searchSalary) { System.out.println(worker); } } scanner.close(); } } |
2.2 自主设计性实验
2、已知有 User类,属性为姓名、年龄、性别,完成类的封装并提供无参数、有参数构造方法,完成以下要求:
(1) 创建一个 List,在 List 中增加三个User对象
(2) 打印输出集合中所有的女用户信息
(3) 利用自遍历的方式,打印输出用户姓名长度大于 2 的信息
3、创建一个商品(Product)类,属性:商品名,商品单价,商品的数量,商品产地。
(1) 创建多个商品对象,存储在List集合中,集合中不能出现重复商品,商品名相同即为重复,在Product类中添加必要的方法;
(2) 显示所有的商品信息;
(3) 打印输出商品价格 > 1000 的所有商品信息;
(4) 打印售空的商品的信息;
(5) 打印输出商品产地为"北京"的商品信息;
(6) 输入一个商品名,查询出此类商品的信息,如果不存在,则打印商品"商场无此商品!!!"
(7) 输入一个价格段,查询出集合中所有在这个价格区间的所有商品信息。
4、利用 List存储多个整数,例如:19、45、309、21、189,完成以下需求:
(1) 将 集合中所有数据进行打印输出
(2) 将集合中所有的三位数进行打印输出
(3) 计算集合中所有数据的平均值
(4) 打印输出集合中的最大值
(5) 将集合中的所有元素进行倒叙打印输出
5、利用List存储多个字符,例如:'A'、'a'、's'、'p'、'+'、'X'、'-',完成以下需求:
(1) 将集合中所有的字符进行拼接,打印拼接结果
(2) 打印输出集合所有的大写字母
(3) 统计集合中非字母的个数,并打印输出
6、根据以下界面提示以及附件源码,设计一个程序,用于管理学生信息。[综合性程序设计]

三、实验设备(材料)
3.1 计算机设备
****操作系统:****建议使用 Windows或 macOS 等主流操作系统,确保系统稳定且已安装 Java 开发环境(JDK),JDK 版本建议为 Java 17 或Java 22。
****处理器:****具备基本的计算处理能力,能够流畅运行 Java 程序。一般来说,普通的笔记本电脑或台式机处理器均可满足需求,如英特尔酷睿系列或 AMD 锐龙系列处理器。
****内存:****至少 8GB 及以上的内存,以保证在编译和运行 Java 程序时系统不会因内存不足而出现卡顿或异常。
3.2 开发工具
****集成开发环境(IDE):****推荐使用 IntelliJ IDEA专业的 Java 开发工具,这些 IDE 提供了代码编辑、编译、调试等功能,能够极大地提高开发效率。当然,也可以使用简单的文本编辑器(如 Notepad++、Sublime Text 等)结合命令行工具进行 Java 开发,但对开发者的要求相对较高。
****Java 开发工具包(JDK):****作为 Java 开发的核心工具包,包含了 Java 编译器(javac)、Java 运行时环境(JRE)等必要的工具和库。确保 JDK 已正确安装并配置好环境变量,以便在命令行或 IDE 中能够正常使用 Java 相关命令。
3.3 其他辅助工具
****文档编辑器:****用于记录实验过程、回答思考题等,如 Microsoft Word、WPS 文字处理软件等。
****截图工具:****用于截取程序代码和运行结果图。
四、实验注意事项
4.1 代码编写规范
严格遵循 Java 的命名规范,类名、方法名、变量名等应具有明确的含义,采用驼峰命名法,增强代码的可读性。例如,类名首字母大写,方法名和变量名首字母小写。
注意代码的缩进和排版,保持代码的整洁和美观。一般来说,使用 4 个空格或一个制表符进行缩进,使代码结构清晰,易于理解和维护。
合理添加注释,对关键代码、复杂逻辑或重要步骤进行详细解释,方便自己和他人阅读代码。注释可以使用单行注释(//)或多行注释(/* ... */)。
4.2 输入输出处理
在读取输入时,要注意处理可能出现的异常情况,如输入格式错误、输入数据超出范围等。可以使用异常处理机制(try-catch 语句)来捕获和处理这些异常,避免程序因输入错误而崩溃。
输出结果时,要严格按照实验要求的格式进行输出,包括换行符、空格等的使用。例如,本题要求每个名字占一行输出,务必确保输出格式正确,否则可能导致测试不通过。
4.3 编译与运行
在编译 Java 程序之前,确保代码中没有语法错误。可以使用 IDE 提供的语法检查功能或通过命令行使用javac命令进行编译。如果编译过程中出现错误,仔细阅读错误信息,定位并修正代码中的问题。
运行程序时,要注意程序的运行环境和输入数据的正确性。可以使用不同的测试用例进行测试,确保程序在各种情况下都能正常运行并得到正确的结果。
4.4 资源管理
在使用Scanner等资源时,要注意及时关闭资源,避免资源泄漏。可以在程序结束时调用scanner.close()方法关闭Scanner对象。
对于使用的其他资源(如文件、网络连接等),同样要遵循资源管理的原则,在不再使用时及时释放资源,保证程序的性能和稳定性。
4.5 实验记录与提交
在实验过程中,要认真记录实验步骤、遇到的问题及解决方法等关键信息。这些记录有助于自己回顾和总结实验过程。
实验成果提交要确保代码截图清晰、源码规范,并对实验结果进行详细的分析和总结。
五、 思考题
1、Java 中的 List 集合有哪些常用实现类?它们之间的主要区别是什么?
2、当需要频繁进行元素的插入和删除操作时,应该选择 ArrayList 还是 LinkedList?为什么?
3、如何往 List 集合中添加元素?如何获取指定位置的元素?如何删除集合中的元素?
4、如何遍历一个 List 集合?请说出至少两种常用的遍历方式。
5、如何判断一个List集合是否包含某个元素?