Java基础(第九期):Java中的集合 ArrayList 集合的增删改查 Java实现学生信息管理系统

⚠️Java基础专栏

文章目录

    • ⚠ Java基础最后一期(第九期)到此结束
  • Java中的集合
    • 一、什么是集合
    • 二、ArrayList
        • 2.1 ArrayList介绍
        • 2.2ArrayList使用
        • 2.3 ArrayList添加
          • add()方法
          • add(index,E element)方法
        • 2.4 ArrayList删除
          • remove(index)方法
          • remove (object) 方法
        • 2.5 ArrayList修改
          • set(index ,element)方法
        • 2.6 ArrayList查询
          • get(index)方法
          • size()方法
        • 2.7 ArrayList集合的小练习
          • 练习一、
          • 练习二、
          • 练习三、
          • 练习四、
          • 练习五、
          • 练习六、
          • Array List常用方法总汇
    • 三、学生信息管理系统

⚠ ⚠ Java进阶专栏!!!!!

⚠ Java基础最后一期(第九期)到此结束

Java中的集合

一、什么是集合

  • 集合是一种容器,用来装数据,类似于数组。

与数组的区别就是,数组定义玩了,长度就固定了

  • 而集合是可变的,开发中用的最多。

二、ArrayList

2.1 ArrayList介绍

ArrayList:是一个可变数组,无参构造默认初始化一个长度为10空间,若是超出,那么会扩容到原来的1.5倍。

原理图:
在这里插入图片描述

看场景使用:

  1. 如果是固定不变的则使用数组
  2. 如果是随机的不确定的,在使用ArrayList集合存放。
2.2ArrayList使用

细节:创建StringBuilde 、 String、 ArrayList的对象,打印对象名,都没有看到地址值,都是元素的内容哦!

1. 构造方法: public ArrayList() : 创建一个空的集合容器2. 集合容器的创建细节:ArrayList list = new ArrayList();现象;可以添加任意数据类型弊端:数据不严谨

使用格式:

        // ArrayList的使用ArrayList<String> list = new ArrayList<>();list.add("泛型限定后只能添加字符串");System.out.println(list);   // [泛型限定后只能添加字符串]
  • <数据类型>: 里面写数据类型,jdk7以上在后面的<>中可以为空。

  • 泛型<>:

    <>:中不能出现基本数据类型,想要写其基本数据类型,就得使用包装类(首字母大写就会有提示)

集合练习:

        // 1. 创建一个集合容器,内部存储 11.1 22.2 33.3ArrayList<Double> num = new ArrayList<>();num.add(11.1);num.add(22.2);num.add(33.3);System.out.println(num);// 2. 创建一个集合容器,内部存储 张三,李四,王五ArrayList<String> string = new ArrayList<>();string.add("张三");string.add("李四");string.add("王五");System.out.println(string);
  • 泛型非常强势的。
2.3 ArrayList添加
add()方法
  • 将指定的元素添加到集合的尾部。
  • 返回值为boolean类型(永远为true)。
add(index,E element)方法
  • 将元素插入到指定的位置上(插队)
  • 返回值为空,有索引必定会出现越界的关系
        // add()无参方法ArrayList<String> list = new ArrayList<>();list.add("liu");list.add("jin");list.add("tao");System.out.println(list);// add(index, E element) 带参方法(插入添加)list.add(2, "插入");list.add(4, "尾部添加");System.out.println(list);
  • 记住带参方法添加不能越界
2.4 ArrayList删除
remove(index)方法
  • 根据索引号做删除,返回值为被删除的元素。
        ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");// remove(index)删除方法System.out.println(list); // [张三, 李四, 王五]String result = list.remove(1);System.out.println(result);   // 李四System.out.println(list);   // [张三, 王五]
remove (object) 方法
  • 根据指定元素删除,返回值为是否成功(boolean类型)
       // remove(object)删除方法System.out.println(list);   // [张三, 王五]boolean remove = list.remove("王五");System.out.println(remove);     // trueSystem.out.println(list);    // [张三]
2.5 ArrayList修改
set(index ,element)方法
  • 修改指定索引号的元素值,返回被覆盖(修改)的值。
        ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");// set(index , new element)方法String result = list.set(2, "赵六");System.out.println(result);  // 王五System.out.println(list);   // [张三, 李四, 赵六]
2.6 ArrayList查询
get(index)方法
  • 根据索引号获取集合元素,返回索引对应的元素
        ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");// 查询(index)方法String result = list.get(2);System.out.println(result); // 王五
size()方法
  • 返回集合中元素的个数
        // 查询集合长度方法int len = list.size();System.out.println(len);    // 3

以上就是集合ArrayList的常用过的增删改查操作了。

2.7 ArrayList集合的小练习
练习一、
需求:创建一个类型为字符串类型的集合,然后取出每一个元素
        ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");for (int i = 0; i < list.size(); i++){System.out.println(list.get(i));}
练习二、
需求:定义一个字符串类型的集合,然后对字符串长度为4的元素做打印。
        ArrayList<String> list = new ArrayList<>();list.add("12");list.add("123");list.add("1234");list.add("1212");list.add("1213");list.add("1213213");for (int i = 0; i < list.size(); i++) {String s = list.get(i);if (s.length() == 4) {System.out.println(s);}}
练习三、
需求:创建一个存储学生对象的集合,存储三个学生对象,并且打印年龄低于18岁的学生信息

Student类

package com.liujintao.domain;public class Student {String name;int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}
}

测试类文件

package com.liujintao.test;import com.liujintao.domain.Student;import java.util.ArrayList;public class ArrayListText02 {public static void main(String[] args) {Student stu1 = new Student("张三", 24);Student stu2 = new Student("李四", 8);Student stu3 = new Student("王五", 15);// 创建学生集合ArrayList<Student> list = new ArrayList<>();list.add(stu1);list.add(stu2);list.add(stu3);// 输出年龄小于18岁的学生信息for (int i = 0; i < list.size(); i++) {Student age = list.get(i);if (age.getAge() == 18) {System.out.println(age.getName() +"---" + age.getAge());}}}}
练习四、
需求:创建一个存储学生对象的集合,存储3个学生对对象,使用程序实现在控制台遍历该集合,学生的姓名和年龄来自于键盘录入。

测试类:

package com.liujintao.test;import com.liujintao.domain.Student;import java.util.ArrayList;
import java.util.Scanner;public class ArrayListText03 {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();for (int i = 1; i <= 3; i++) {System.out.println("请输入第" + i + "个学生的信息");addStudent(list);}for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getName() + "---" + stu.getAge());}}public static void addStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);System.out.println("请输入学生姓名:");String name = sc.next();System.out.println("请输入学生年龄:");int age = sc.nextInt();Student stu = new Student(name, age);list.add(stu);}
}

学生类:

package com.liujintao.domain;public class Student {String name;int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}
}

请输入第1个学生的信息
请输入学生姓名:
张三
请输入学生年龄:
23
请输入第2个学生的信息
请输入学生姓名:
李四
请输入学生年龄:
24
请输入第3个学生的信息
请输入学生姓名:
王五
请输入学生年龄:
25
张三—23
李四—24
王五—25

练习五、
需求:创建一个存储String的集合,内部存储(test, 张三, test,test, 李四)字符串删除所有的test字符串,删除后,将集合剩余元素打印在控制台
  • 注意点,ArrayList集合是自动收缩的,删除了,会补齐,印象影响引用的指向。

  • 建议,正序清除记得–

  • 反序正常遍历即可。

package com.liujintao.test;import java.util.ArrayList;public class ArrayListTest04 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("test");list.add("张三");list.add("李四");list.add("test");list.add("test");// 方法一:正序遍历处理method1(list);// 方法二:倒序遍历处理method2(list);}private static void method2(ArrayList<String> list) {for (int i = list.size() - 1; i >= 0; i--) {String s = list.get(i);if ("test".equals(s)) {list.remove(i);}}System.out.println(list);}private static void method1(ArrayList<String> list) {for (int i = 0; i < list.size(); i++) {String s = list.get(i);if ("test".equals(s)) {list.remove(i);i--;}}System.out.println(list);}
}
练习六、

需求: 定义一个方法,方法接受一个集合对象(泛型为Student)

方法内部将年龄低于 18 的学生对象找出

并存入新集合对象,方法返回新集合

package com.liujintao.test;import com.liujintao.domain.Student;import java.util.ArrayList;
import java.util.Scanner;public class ArrayListTest05 {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();// 初始化JavaBean数据list.add(new Student("张三", 13));list.add(new Student("李四", 14));list.add(new Student("王五", 24));list.add(new Student("赵六", 15));list.add(new Student("小明", 23));ArrayList<Student> result = handleFilter(list);// 遍历打印for (Student stu : result) {System.out.println(stu.getName() + " --" + stu.getAge());}}/*** 过滤学生数据* @param list* @return ArrayList<Student> list*/private static ArrayList<Student> handleFilter(ArrayList<Student> list) {ArrayList<Student> newList = new ArrayList<>();for (Student stu : list) {if (stu.getAge() < 18) {newList.add(stu);}}return newList;}}

张三 --13
李四 --14
赵六 --15

Array List常用方法总汇

在这里插入图片描述

三、学生信息管理系统

需求:完成学生的信息管理(增删改查功能的实现)

根据菜单栏(完成相应的功能);

            System.out.println("1   添加学生");System.out.println("2   删除学生");System.out.println("3   修改学生");System.out.println("4   查看学生");System.out.println("5   退出");

业务逻辑类:

package com.liujintao.priject;import java.util.ArrayList;
import java.util.Scanner;public class manageSystem {public static void main(String [] args) {/*** 启动*/start();}/*** 系统入口*/public static void start() {// 学生信息库ArrayList<Student> list = new ArrayList<>();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 sc = new Scanner(System.in);sc = new Scanner(System.in);int num = sc.nextInt();switch (num) {case 1:addStudent(list);break;case 2:handleDelete(list);break;case 3:changeStudent(list);break;case 4:queryStudent(list);break;case 5:System.out.println("退出");System.exit(0);default:System.out.println("业务暂未开通,请确认后重试!");break;}}}/*** 添加学生信息* @param list*/public static void addStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);System.out.println("请输入学生学号");String id = sc.next();// 下标都不存在,则视为学生信息不存在,放行int result = getIndex(id, list);if (result == -1) {System.out.println("请输入学生姓名");String name = sc.next();System.out.println("请输入学生年龄");int age = sc.nextInt();System.out.println("请输入学生出生日期");String datebirth = sc.next();Student stu = new Student(id, name, age, datebirth);list.add(stu);System.out.println("添加成功!");} else {System.out.println("该信息已经被使用");}}/*** 删除学生信息*/public static void handleDelete (ArrayList<Student> list) {Scanner sc = new Scanner(System.in);System.out.println("请输入需要删除的学生学号:");String inputId = sc.next();// 根据学号拿到学生对象的下标int id = getIndex(inputId, list);for (int i = 0; i < list.size(); i++) {if (id == -1) {System.out.println("无法删除不存在的学生信息!");break;} else {list.remove(id);System.out.println("删除成功!");}}}/*** 修改学生信息*/public static void changeStudent(ArrayList<Student> list) {// 拿到需要删除的学生学号,然后再得到下标处理Scanner sc = new Scanner(System.in);System.out.println("请输入您需要修改的学生编号:");String inputId = sc.next();// 调用方法处理得到下标int index = getIndex(inputId, list);if (index != -1) {System.out.println("请输入修改后的姓名:");String changeName = sc.next();System.out.println("请输入修改后的年龄:");int changeAge = sc.nextInt();System.out.println("请输入修改后的出生日期:");String changeDate = sc.next();// 将新的值覆盖list.get(index).setId(inputId);list.get(index).setName(changeName);list.get(index).setAge(changeAge);list.get(index).setDatebirth(changeDate);System.out.println("修改成功!");} else {System.out.println("您需要修改的学生信息不存在!");}}/*** 查询学生信息*/public static void queryStudent (ArrayList<Student> list) {System.out.println("学号\t\t\t\t姓名\t年龄\t出生日期");for (Student stu : list) {System.out.println(stu.getId() + stu.getName() + stu.getAge() + stu.getDatebirth());}}/*** 获取学生在信息库的下标(根据id来判断)*/public static int getIndex(String id, ArrayList<Student> list) {for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {return i;}}return -1;}
}

javaBean数据类:

package com.liujintao.priject;
class Student {/*** 成员方法学生信息* id: 学号* name:姓名* age:年龄* datebirth:出生日期*/private String id;private String name;private int age;private String datebirth;/*** 初始化数据使用构造器*/public Student() {}public Student(String id, String name, int age, String datebirth) {this.id = id;this.name = name;this.age = age;this.datebirth = datebirth;}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return datebirth*/public String getDatebirth() {return datebirth;}/*** 设置* @param datebirth*/public void setDatebirth(String datebirth) {this.datebirth = datebirth;}}

在这里插入图片描述

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

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

相关文章

LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86

facebookresearch/llama Stars: 36.0k License: NOASSERTION LLaMA 2 是一个开源项目&#xff0c;用于加载 LLaMA 模型并进行推理。 该项目的主要功能是提供预训练和微调后的 LLaMA 语言模型的权重和起始代码。这些模型参数范围从 7B 到 70B 不等。 以下是该项目的关键特性…

量化交易:因子风险暴露

本文介绍了如何计算因子风险暴露的内容。 判断风险暴露的建模是否合理 通常&#xff0c;此分析是基于历史数据&#xff0c;而对历史风险暴露的估计可能会影响未来的风险暴露。 因此&#xff0c;计算因子风险暴露是不够的。 必须对风险暴露保持信心&#xff0c;并明白对风险暴…

详解#define

我们要知道&#xff0c;#define后面定义的标识符只进行替换而不进行计算&#xff0c;我们不能根据惯性自动给它计算了&#xff0c;这样可能会出错。 目录 1.关于#define 1.1#define定义标识符 1.2#define定义宏 1.3#define的替换规则 2.#和## 1.# 2.## 3.带副作用的宏参…

前端vue3——html2canvas给网站截图生成宣传海报

文章目录 ⭐前言⭐选择html2canvas实现网页截图&#x1f496; 截图 ⭐图片url截图显示不出来问题&#x1f496; 解决 ⭐最终效果&#x1f496; 定义海报 ⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端vue3——html2canvas给网站截图生成宣传…

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 目录 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

【设计模式-2.1】创建型——单例模式

说明&#xff1a;设计模式根据用途分为创建型、结构性和行为型。创建型模式主要用于描述如何创建对象&#xff0c;本文介绍创建型中的单例模式。 饿汉式单例 单例模式是比较常见的一种设计模式&#xff0c;旨在确保对象的唯一性&#xff0c;什么时候去使用这个对象都是同一个…

第一百七十九回 自定义SlideImageSwitch

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SlideSwitch组件"相关的内容&#xff0c;本章回中将介绍自定义SlideImageSwitch.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概…

代码随想录算法训练营 ---第四十二天

今天开始学习 动态规划&#xff1a;背包问题 也是比较难的一部分了 动态规划&#xff1a;背包问题 理论基础 01背包&#xff08;二维数组&#xff09; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用…

网络运维与网络安全 学习笔记2023.11.25

网络运维与网络安全 学习笔记 第二十六天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…

求集合的笛卡尔乘积

求集合的笛卡尔乘积 一&#xff1a;【实验目的】二&#xff1a;【实验内容】三&#xff1a;【实验原理】四&#xff1a;代码实现&#xff1a; 一&#xff1a;【实验目的】 通过编实现给定集合A和B的笛卡尔积CAA,DAB,EBA,FAAB,GA(A*B&#xff09;. 二&#xff1a;【实验内容】…

【Android Gradle】之Gradle入门及 wrapper 生成(一)

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

illuminate/database 使用 四

文档&#xff1a;Hyperf Database: Getting Started - Laravel 10.x - The PHP Framework For Web Artisans 因为hyperf使用illuminate/database&#xff0c;所以按照文章&#xff0c;看illuminate/database代码实现。 一、读写分离 根据文档读写的host可以分开。设置读写分…