⚠️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倍。
原理图:
看场景使用:
- 如果是固定不变的则使用数组
- 如果是随机的不确定的,在使用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;}}