Java 集合框架中的 List、ArrayList 和 泛型 实例

embedded/2024/12/23 5:24:31/

在这里插入图片描述

Java 集合框架中的 ListArrayList 和 泛型

在 Java 中,集合框架提供了许多不同类型的集合类,用于存储和操作对象。ListArrayList 是最常用的两种集合类型,而泛型(Generics)则是 Java 中的一项重要特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现类型安全和代码复用。本文将通过案例展示如何综合使用 ListArrayList 和泛型来管理学生数据。

1. ListArrayList

List

List 是 Java 集合框架中的一个接口,它表示一个有序的元素集合,允许元素重复。List 接口继承自 Collection 接口,并定义了一些基本的方法,如 add()remove()get()size()

java">public interface List<E> extends Collection<E> {// List 接口中的方法    
}

其中,E 是泛型参数,表示 List 中存储的元素类型。你可以在创建 List 时指定元素类型,例如 List<String> 表示一个包含 String 元素的列表,List<Student> 表示一个包含 Student 对象的列表。

ArrayList

ArrayListList 接口的一个实现,它基于动态数组实现,能够根据需要自动扩展容量。ArrayList 是一个常用的实现,因为它提供了常数时间的随机访问和高效的插入操作。

java">List<Student> students = new ArrayList<>();

2. 泛型(Generics)

泛型是 Java 中的一项强大特性,允许我们在编写类、接口或方法时使用类型参数,以便支持不同类型的数据。泛型可以提高代码的类型安全性,避免了强制类型转换的麻烦,并使得代码更易于复用。

java">// 创建一个 String 类型的 List
List<String> stringList = new ArrayList<>();// 创建一个 Student 类型的 List
List<Student> studentList = new ArrayList<>();

通过泛型,编译器会在编译时检查类型,确保在集合中只存储指定类型的元素,从而避免了运行时的 ClassCastException 异常。

3. 动态数组与泛型的关系

动态数组和泛型虽然是两个不同的概念,但它们在 Java 集合框架中经常一起使用。例如,ArrayList 是基于动态数组实现的,同时支持泛型,使得我们能够存储不同类型的数据,并提供类型安全。

动态数组(Dynamic Array)

动态数组是一种可以根据需求动态扩展或收缩的数组。它通常会在数组满时进行扩展,扩展的容量一般是当前数组的两倍。ArrayList 就是一个典型的动态数组实现。

泛型(Generics)

泛型允许我们在定义类或方法时使用类型参数,支持不同数据类型的复用。通过泛型,ArrayList 可以存储任何类型的数据,同时提供类型安全。

4. 综合使用案例:学生管理系统

以下是一个综合使用 ListArrayList 和泛型的案例,展示了如何使用 List<Student> 来管理学生信息,并进行增、删、查、改等操作。

步骤 1:创建 Student

首先,我们创建一个简单的 Student 类,包含学生的基本信息。

java">public class Student {private String id;private String name;private String major;private int age;// 构造函数public Student(String id, String name, String major, int age) {this.id = id;this.name = name;this.major = major;this.age = age;}// Getter 和 Setter 方法public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 打印学生信息@Overridepublic String toString() {return "Student{id='" + id + "', name='" + name + "', major='" + major + "', age=" + age + "}";}
}
步骤 2:创建 StudentManager

接下来,我们定义一个 StudentManager 类来管理学生信息。我们将使用 List<Student> 来存储学生对象,并提供增、删、查、改操作。

java">import java.util.ArrayList;
import java.util.List;public class StudentManager {private List<Student> students;// 构造方法,初始化学生列表public StudentManager() {students = new ArrayList<>();}// 添加学生public void addStudent(Student student) {students.add(student);System.out.println("Student added: " + student);}// 删除学生public void removeStudentById(String id) {students.removeIf(student -> student.getId().equals(id));System.out.println("Student with ID " + id + " removed.");}// 查找学生public Student findStudentById(String id) {for (Student student : students) {if (student.getId().equals(id)) {return student;}}return null; // 如果未找到,返回 null}// 更新学生信息public void updateStudent(String id, String name, String major, int age) {Student student = findStudentById(id);if (student != null) {student.setName(name);student.setMajor(major);student.setAge(age);System.out.println("Student updated: " + student);} else {System.out.println("Student with ID " + id + " not found.");}}// 打印所有学生public void printAllStudents() {System.out.println("All students:");for (Student student : students) {System.out.println(student);}}
}
步骤 3:使用学生管理系统

我们可以通过 StudentManager 类来管理学生信息。以下是操作示例:

java">public class Main {public static void main(String[] args) {// 创建学生管理器对象StudentManager manager = new StudentManager();// 创建学生对象Student student1 = new Student("S001", "Alice", "Computer Science", 20);Student student2 = new Student("S002", "Bob", "Mathematics", 21);Student student3 = new Student("S003", "Charlie", "Physics", 22);// 添加学生到管理器manager.addStudent(student1);manager.addStudent(student2);manager.addStudent(student3);// 打印所有学生manager.printAllStudents();// 查找学生System.out.println("Finding student with ID S002: " + manager.findStudentById("S002"));// 更新学生信息manager.updateStudent("S002", "Bobby", "Statistics", 22);// 删除学生manager.removeStudentById("S003");// 打印所有学生manager.printAllStudents();}
}
运行结果
Student added: Student{id='S001', name='Alice', major='Computer Science', age=20}
Student added: Student{id='S002', name='Bob', major='Mathematics', age=21}
Student added: Student{id='S003', name='Charlie', major='Physics', age=22}
All students:
Student{id='S001', name='Alice', major='Computer Science', age=20}
Student{id='S002', name='Bob', major='Mathematics', age=21}
Student{id='S003', name='Charlie', major='Physics', age=22}
Finding student with ID S002: Student{id='S002', name='Bob', major='Mathematics', age=21}
Student updated: Student{id='S002', name='Bobby', major='Statistics', age=22}
Student with ID S003 removed.
All students:
Student{id='S001', name='Alice', major='Computer Science', age=20}
Student{id='S002', name='Bobby', major='Statistics', age=22}

总结

在这个综合案例中,我们展示了如何使用 ListArrayList 和泛型来管理学生数据。通过泛型的引入,我们确保了集合中只能存储指定类型的元素,从而提高了类型安全性。ArrayList 提供了动态数组的功能,能够灵活管理学生数据的存储,同时通过 StudentManager 类,提供了增、删、查、改等基本的操作。


这个案例通过简洁的代码示范了如何在 Java 中综合使用 ListArrayList 和泛型,并结合实际的管理系统需求,帮助开发者更好地理解 Java 集合的基本使用。


http://www.ppmy.cn/embedded/147984.html

相关文章

Python实现应用最小二乘法融合SVM-LSTM回归模型电力负荷预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着全球能源需求的不断增长&#xff0c;电力系统的稳定性和效率变得至关重要。准确的电力负荷预测…

融合机器学习算法:用VotingClassifier实现分类多模型的投票集成

背景 VotingClassifier是一种集成学习方法&#xff0c;它将多个不同的机器学习模型组合起来&#xff0c;通过投票的方式对分类任务做出决策&#xff0c;从而提高整体模型的预测性能和鲁棒性 VotingClassifier的核心机制 VotingClassifier提供两种主要的投票策略硬投票和软投…

设计模式学习[13]---抽象工厂模式+简单工厂+工厂方法模式回顾

文章目录 前言1.原理阐述1.1 说明11.2 说明2 2.举例 总结 前言 之前写过一些工厂的相关内容&#xff0c;详情见这两篇&#xff1a;简单工厂与工厂方法 这篇博客主要讲抽象工厂模式。 1.原理阐述 1.1 说明1 抽象工厂模式&#xff1a;提供一个创建一系列相关或相互依赖对象的…

Neo4j插入数据逐级提升速度4倍又4倍

语雀版&#xff1a;https://www.yuque.com/xw76/back/dtukgqfkfwg1d6yo 目录 背景介绍初始方案Node()创建事务批量提交记录Node是否存在生成Cypher语句执行数据库参数优化切换成85k个三元组测试建索引&#xff08;很显著&#xff01;&#xff01;&#xff01;&#xff09;MATCH…

Java 实现 AES 加密和解密

目录 前言 一、AES 加密算法简介 1.诞生背景 2.简介 二、AES 加密算法的核心原理 1.分组密码模式 2.密钥扩展 3.加密轮次与操作 三、AES 加密算法的优势 1.高效性 2.安全性 3.广泛的适用性 四、AES加密模式的几种方式 1.电子密码本模式&#xff08;ECB&#xff0c…

【嵌入式开发笔记】OpenOCD到嵌入式调试

最近在把玩一块Risc-V的开发板&#xff0c;使用开发板调试时&#xff0c;需要用到专门的下载器和OpenOCD进行调试。 为了连接这个板子&#xff0c;费了九牛二虎之力。 这里简单记录一下自己的折腾经过吧。 0x00 环境准备 0x0001 调试背景 系统&#xff1a;Virtual Box Ub…

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包&#xff08;BSP&#xf…

Windows开机黑屏|Windows开机黑屏只有鼠标|Windows开机不运行explorer

输入regedit打开注册表&#xff0c;进入以下路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 左键双击右侧的 Shell 查看是否设置为 Explorer.exe