[JAVA]12.ArrayList

news/2024/4/29 14:15:10/文章来源:https://blog.csdn.net/m0_72431939/article/details/137054098

一、ArrayList

1.1ArrayList类概述

- 什么是集合

​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

- ArrayList集合的特点

​ 底层是数组实现的,长度可以变化

- 泛型的使用

​ 用于约束集合中存储元素的数据类型

1.2ArrayList类常用方法

1.2.1构造方法

方法名

说明

public ArrayList()

创建一个空的集合对象

1.2.2成员方法

方法名

说明

public boolean remove(Object o)

删除指定的元素,返回删除是否成功

public E remove(int index)

删除指定索引处的元素,返回被删除的元素

public E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

public E get(int index)

返回指定索引处的元素

public int size()

返回集合中的元素的个数

public boolean add(E e)

将指定的元素追加到此集合的末尾

public void add(int index,E element)

在此集合中的指定位置插入指定的元素

1.2.3示例代码

public class ArrayListDemo02 {public static void main(String[] args) {//创建集合ArrayList<String> array = new ArrayList<String>();//添加元素array.add("hello");array.add("world");array.add("java");//public boolean remove(Object o):删除指定的元素,返回删除是否成功
//        System.out.println(array.remove("world"));
//        System.out.println(array.remove("javaee"));//public E remove(int index):删除指定索引处的元素,返回被删除的元素
//        System.out.println(array.remove(1));//IndexOutOfBoundsException
//        System.out.println(array.remove(3));//public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
//        System.out.println(array.set(1,"javaee"));//IndexOutOfBoundsException
//        System.out.println(array.set(3,"javaee"));//public E get(int index):返回指定索引处的元素
//        System.out.println(array.get(0));
//        System.out.println(array.get(1));
//        System.out.println(array.get(2));//System.out.println(array.get(3)); //?????? 自己测试//public int size():返回集合中的元素的个数System.out.println(array.size());//输出集合System.out.println("array:" + array);}
}

1.3ArrayList存储字符串并遍历

1.3.1案例需求

​ 创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

1.3.2代码实现

/*思路:1:创建集合对象2:往集合中添加字符串对象3:遍历集合,首先要能够获取到集合中的每一个元素,这个通过get(int index)方法实现4:遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现5:遍历集合的通用格式*/
public class ArrayListTest01 {public static void main(String[] args) {//创建集合对象ArrayList<String> array = new ArrayList<String>();//往集合中添加字符串对象array.add("刘正风");array.add("左冷禅");array.add("风清扬");//遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
//        System.out.println(array.size());//遍历集合的通用格式for(int i=0; i<array.size(); i++) {String s = array.get(i);System.out.println(s);}}
}

1.4ArrayList存储学生对象并遍历

1.4.1案例需求

​ 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

1.4.2代码实现

/*思路:1:定义学生类2:创建集合对象3:创建学生对象4:添加学生对象到集合中5:遍历集合,采用通用遍历格式实现*/
public class ArrayListTest02 {public static void main(String[] args) {//创建集合对象ArrayList<Student> array = new ArrayList<>();//创建学生对象Student s1 = new Student("林青霞", 30);Student s2 = new Student("风清扬", 33);Student s3 = new Student("张曼玉", 18);//添加学生对象到集合中array.add(s1);array.add(s2);array.add(s3);//遍历集合,采用通用遍历格式实现for (int i = 0; i < array.size(); i++) {Student s = array.get(i);System.out.println(s.getName() + "," + s.getAge());}}
}

1.5ArrayList存储学生对象并遍历升级版【应用】

1.5.1案例需求

​ 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

​ 学生的姓名和年龄来自于键盘录入

1.5.2代码实现

/*思路:1:定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为String类型2:创建集合对象3:键盘录入学生对象所需要的数据4:创建学生对象,把键盘录入的数据赋值给学生对象的成员变量5:往集合中添加学生对象6:遍历集合,采用通用遍历格式实现*/
public class ArrayListTest {public static void main(String[] args) {//创建集合对象ArrayList<Student> array = new ArrayList<Student>();//为了提高代码的复用性,我们用方法来改进程序addStudent(array);addStudent(array);addStudent(array);//遍历集合,采用通用遍历格式实现for (int i = 0; i < array.size(); i++) {Student s = array.get(i);System.out.println(s.getName() + "," + s.getAge());}}/*两个明确:返回值类型:void参数:ArrayList<Student> array*/public static void addStudent(ArrayList<Student> array) {//键盘录入学生对象所需要的数据Scanner sc = new Scanner(System.in);System.out.println("请输入学生姓名:");String name = sc.nextLine();System.out.println("请输入学生年龄:");String age = sc.nextLine();//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量Student s = new Student();s.setName(name);s.setAge(age);//往集合中添加学生对象array.add(s);}
}

二、学生管理系统

2.1学生管理系统实现步骤

- 案例需求

​ 针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:

​ 添加学生:通过键盘录入学生信息,添加到集合中

​ 删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除

​ 修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改

​ 查看学生:将集合中的学生对象信息进行展示

​ 退出系统:结束程序

- 实现步骤

1) 定义学生类,包含以下成员变量

​ private String sid // 学生id

​ private String name // 学生姓名

​ private String age // 学生年龄

​ private String address // 学生所在地

2) 学生管理系统主界面的搭建步骤

2.1 用输出语句完成主界面的编写

2.2 用Scanner实现键盘输入

2.3 用switch语句完成选择的功能

2.4 用循环完成功能结束后再次回到主界面

3) 学生管理系统的添加学生功能实现步骤

3.1 定义一个方法,接收ArrayList集合

3.2 方法内完成添加学生的功能

​ ①键盘录入学生信息

​ ②根据录入的信息创建学生对象

​ ③将学生对象添加到集合中

​ ④提示添加成功信息

3.3 在添加学生的选项里调用添加学生的方法

4) 学生管理系统的查看学生功能实现步骤

4.1 定义一个方法,接收ArrayList集合

4.2 方法内遍历集合,将学生信息进行输出

4.3 在查看所有学生选项里调用查看学生方法

5) 学生管理系统的删除学生功能实现步骤

5.1 定义一个方法,接收ArrayList集合

5.2 方法中接收要删除学生的学号

5.3 遍历集合,获取每个学生对象

5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除

5.5 在删除学生选项里调用删除学生的方法

6) 学生管理系统的修改学生功能实现步骤

6.1 定义一个方法,接收ArrayList集合

6.2 方法中接收要修改学生的学号

6.3 通过键盘录入学生对象所需的信息,并创建对象

6.4 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相同,则使用新学生对象替换当前学生对象

6.5 在修改学生选项里调用修改学生的方法

7) 退出系统

使用System.exit(0);退出JVM

学生类的定义

public class Student {//学号private String sid;//姓名private String name;//年龄private String age;//居住地private String address;public Student() {}public Student(String sid, String name, String age, String address) {this.sid = sid;this.name = name;this.age = age;this.address = address;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

测试类的定义

public class StudentManager {/*1:用输出语句完成主界面的编写2:用Scanner实现键盘录入数据3:用switch语句完成操作的选择4:用循环完成再次回到主界面*/public static void main(String[] args) {//创建集合对象,用于保存学生数据信息ArrayList<Student> array = new ArrayList<Student>();//用循环完成再次回到主界面while (true) {//用输出语句完成主界面的编写System.out.println("--------欢迎来到学生管理系统--------");System.out.println("1 添加学生");System.out.println("2 删除学生");System.out.println("3 修改学生");System.out.println("4 查看所有学生");System.out.println("5 退出");System.out.println("请输入你的选择:");//用Scanner实现键盘录入数据Scanner sc = new Scanner(System.in);String line = sc.nextLine();//用switch语句完成操作的选择switch (line) {case "1":addStudent(array);break;case "2":deleteStudent(array);break;case "3":updateStudent(array);break;case "4":findAllStudent(array);break;case "5":System.out.println("谢谢使用");System.exit(0); //JVM退出}}}//定义一个方法,用于添加学生信息public static void addStudent(ArrayList<Student> array) {//键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息Scanner sc = new Scanner(System.in);String sid;while (true) {System.out.println("请输入学生学号:");sid = sc.nextLine();boolean flag = isUsed(array, sid);if (flag) {System.out.println("你输入的学号已经被占用,请重新输入");} else {break;}}System.out.println("请输入学生姓名:");String name = sc.nextLine();System.out.println("请输入学生年龄:");String age = sc.nextLine();System.out.println("请输入学生居住地:");String address = sc.nextLine();//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量Student s = new Student();s.setSid(sid);s.setName(name);s.setAge(age);s.setAddress(address);//将学生对象添加到集合中array.add(s);//给出添加成功提示System.out.println("添加学生成功");}//定义一个方法,判断学号是否被使用public static boolean isUsed(ArrayList<Student> array, String sid) {//如果与集合中的某一个学生学号相同,返回true;如果都不相同,返回falseboolean flag = false;for(int i=0; i<array.size(); i++) {Student s = array.get(i);if(s.getSid().equals(sid)) {flag = true;break;}}return flag;}//定义一个方法,用于查看学生信息public static void findAllStudent(ArrayList<Student> array) {//判断集合中是否有数据,如果没有显示提示信息if (array.size() == 0) {System.out.println("无信息,请先添加信息再查询");//为了让程序不再往下执行,我们在这里写上return;return;}//显示表头信息//\t其实是一个tab键的位置System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地");//将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”for (int i = 0; i < array.size(); i++) {Student s = array.get(i);System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t\t" + s.getAddress());}}//定义一个方法,用于删除学生信息public static void deleteStudent(ArrayList<Student> array) {//键盘录入要删除的学生学号,显示提示信息Scanner sc = new Scanner(System.in);System.out.println("请输入你要删除的学生的学号:");String sid = sc.nextLine();//在删除/修改学生操作前,对学号是否存在进行判断//如果不存在,显示提示信息//如果存在,执行删除/修改操作int index = -1;for (int i = 0; i < array.size(); i++) {Student s = array.get(i);if (s.getSid().equals(sid)) {index = i;break;}}if (index == -1) {System.out.println("该信息不存在,请重新输入");} else {array.remove(index);//给出删除成功提示System.out.println("删除学生成功");}}//定义一个方法,用于修改学生信息public static void updateStudent(ArrayList<Student> array) {//键盘录入要修改的学生学号,显示提示信息Scanner sc = new Scanner(System.in);System.out.println("请输入你要修改的学生的学号:");String sid = sc.nextLine();//键盘录入要修改的学生信息System.out.println("请输入学生新姓名:");String name = sc.nextLine();System.out.println("请输入学生新年龄:");String age = sc.nextLine();System.out.println("请输入学生新居住地:");String address = sc.nextLine();//创建学生对象Student s = new Student();s.setSid(sid);s.setName(name);s.setAge(age);s.setAddress(address);//遍历集合修改对应的学生信息for (int i = 0; i < array.size(); i++) {Student student = array.get(i);if (student.getSid().equals(sid)) {array.set(i, s);}}//给出修改成功提示System.out.println("修改学生成功");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1028294.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Chrome控制台】network选项卡的使用

首先打开调试面板「windows:F12&#xff1b;mac&#xff1a;commandoptioni」&#xff0c;找到Network选项卡&#xff0c;其中是对网络相关的数据信息。 录制 控制台内容区域左上角红色按钮就是录制按钮&#xff0c;默认是开启状态&#xff0c;表示监听整个页面运行过程中所产…

Delphi模式编程

文章目录 Delphi模式编程涉及以下几个关键方面&#xff1a;**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境&#xff08;IDE&#xff09;和Object Pascal语言进行软件开发时&#xff0c;采用…

九河云荣获“华为2024·亚太区年度杰出合作伙伴奖”

2024年3月26日~27日&#xff0c;以“加速智能化&#xff0c;一切皆服务”为主题的华为亚太生态伙伴大会在东莞隆重开幕&#xff0c;九河云作为专业的多云管理服务商&#xff0c;凭借多年来在云领域的赋能发展应邀出席并荣获“亚太区年度杰出伙伴奖”&#xff0c;这不仅彰显了九…

Reactor 模式全解:实现非阻塞 I/O 多路复用

Reactor网络模式是什么&#xff1f; Reactor网络模式时目前网络最常用的网络模式。如果你使用Netty&#xff0c;那么你在使用Reactor;如果你使用Twisted,那么你子啊使用Reactor;如果你使用netpoll&#xff0c;那么你在使用Reactor。 这里先给出答案&#xff1a;Reactor I/O多…

K8S之DaemonSet控制器

DaemonSet控制器 概念、原理解读、应用场景概述工作原理典型的应用场景介绍DaemonSet 与 Deployment 的区别 解读资源清单文件实践案例 概念、原理解读、应用场景 概述 DaemonSet控制器能够确保K8S集群所有的节点都分别运行一个相同的pod副本&#xff1b; 当集群中增加node节…

华为升级FIT AP示例(通过AC的命令行)

升级FIT AP示例&#xff08;通过AC的命令行&#xff09; 前提条件 从官网下载升级目标版本对应的系统软件包&#xff0c;保存在PC本地。如果下载的文件是压缩文件&#xff0c;则需要解压缩出系统软件包。 AP已在WAC上线。 背景信息 升级的过程是先将系统软件包传到设备上&…

数据结构基础(三)链表

链表&#xff08;Linked List&#xff09;是一种常见的线性数据结构&#xff0c;由一系列称为节点&#xff08;Node&#xff09;的元素组成&#xff0c;每个节点包含两部分&#xff1a;数据&#xff08;Data&#xff09;和指向下一个节点的引用&#xff08;Pointer 或者 Link&a…

STM32CubeMX学习笔记27---FreeRTOS事件

一、简介 1、 基本概念 事件是一种实现任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。 与信号量不同的是&#xff0c;它可以实现一对多&#xff0c;多对多的同步。即一个任务可以等待多个事件的…

CentOS使用Docker部署Halo并结合内网穿透实现公网访问本地博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…

C语言例4-33:求调和级数中第多少项的值大于10

代码如下&#xff1a; //求调和级数中第多少项的值大于10 //调和级数的第n项为11/21/3...1/n #include<stdio.h> #define LIMIT 10 int main(void) {int n1;float sum0.0;for(;;) //死循环&#xff0c;或者while&#xff08;1&#xff09;{sumsum1.0/n;if(sum&g…

GitLab更新失败(Ubuntu)

在Ubuntu下使用apt更新gitlab报错如下&#xff1a; An error occurred during the signature verification.The repository is not updated and the previous index files will be used.GPG error: ... Failed to fetch https://packages.gitlab.com/gitlab/gitlab-ee/ubuntu/d…

Solidity Uniswap V2 Router swapTokensForExactTokens

最初的router合约实现了许多不同的交换方式。我们不会实现所有的方式&#xff0c;但我想向大家展示如何实现倒置交换&#xff1a;用未知量的输入Token交换精确量的输出代币。这是一个有趣的用例&#xff0c;可能并不常用&#xff0c;但仍有可能实现。 GitHub - XuHugo/solidit…

elasticsearch 8.12+kibana 8.12

准备工作&#xff1a;1.下载相关的安装包放到/usr/local/ES下面 elasticsearch下载地址:Download Elasticsearch | Elastic elasticsearch-head-master下载地址:https://github.com/mobz/elasticsearch-head/archive/master.zip node下载地址:Index of /dist/ kibana地址:Downl…

设计模式之桥接模式解析

桥接模式 1&#xff09;概述 1.定义 桥接模式(Bridge Pattern) 将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。 2.作用 如果系统中某个类存在两个独立变化的维度&#xff0c;通过该模式可以将这两个维度分离出来&#xff0c;使两者可以独立扩展。 3.…

(一)基于IDEA的JAVA基础5

Scanner的使用 使用scanner可以接收键盘上输入的数据&#xff0c; Scanner inputnew Scanner(System.in)&#xff1b; 导包的方式: 什么是导包&#xff0c;导入的是jdk提供的java开发工具包&#xff0c;我们建一个java文件&#xff0c;psvm快捷输入后&#xff0c;打上new S…

静态住宅IP优缺点,究竟要怎么选?

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

论文研读:Transformers Make Strong Encoders for Medical Image Segmentation

论文&#xff1a;TransUNet&#xff1a;Transformers Make Strong Encoders for Medical Image Segmentation 目录 Abstract Introduction Related Works 各种研究试图将自注意机制集成到CNN中。 Transformer Method Transformer as Encoder 图像序列化 Patch Embed…

47 vue 常见的几种模型视图不同步的问题

前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …

书生浦语训练营2期-第一节课笔记

笔记总结: 了解大模型的发展方向、本质、以及新一代数据清洗过滤技术、从模型到应用的典型流程、获取数据集的网站、不同微调方式的使用场景和训练数据是什么&#xff0c;以及预训练和微调在训练优势、通信/计算调度、显存管理上的区别。 收获&#xff1a; 理清了预训练和微调…

【优选算法】专题1 -- 双指针 -- 复写0

前言&#xff1a; 补充一下前文没有写到的双指针入门知识&#xff1a;专题1 -- 双指针 -- 移动零 目录 基础入门知识&#xff1a; 1. 复写零&#xff08;easy&#xff09; 1. 题⽬链接&#xff1a;1089.复习0 - 力扣&#xff08;LeetCode&#xff09; 2. 题⽬描述&#xff…