共计 8404 个字符,预计需要花费 22 分钟才能阅读完成。
1.ArrayList
汇合和数组的劣势比照:
- 长度可变
- 增加数据的时候不须要思考索引,默认将数据增加到开端
1.1 ArrayList 类概述
-
什么是汇合
提供一种存储空间可变的存储模型,存储的数据容量能够产生扭转
-
ArrayList 汇合的特点
长度能够变动,只能存储援用数据类型。
-
泛型的应用
用于束缚汇合中存储元素的数据类型
1.2 ArrayList 类罕用办法
1.2.1 构造方法
办法名 | 阐明 |
---|---|
public ArrayList() | 创立一个空的汇合对象 |
1.2.2 成员办法
办法名 | 阐明 |
---|---|
public boolean add(要增加的元素) | 将指定的元素追加到此汇合的开端 |
public boolean remove(要删除的元素) | 删除指定元素, 返回值示意是否删除胜利 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 批改指定索引处的元素,返回被批改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回汇合中的元素的个数 |
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.3 ArrayList 存储字符串并遍历
1.3.1 案例需要
创立一个存储字符串的汇合,存储 3 个字符串元素,应用程序实现在控制台遍历该汇合
1.3.2 代码实现
public class ArrayListDemo3 {public static void main(String[] args) {
//1. 创立汇合对象
ArrayList<String> list = new ArrayList<>();
//2. 增加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
//3. 遍历
// 快捷键: list.fori 正向遍历
//list.forr 倒着遍历
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
//i 顺次示意汇合外面的每一个索引
if(i == list.size() - 1){
// 最大索引
System.out.print(list.get(i));
}else{
// 非最大索引
System.out.print(list.get(i) + ",");
}
}
System.out.print("]");
}
}
1.4 ArrayList 存储学生对象并遍历
1.4.1 案例需要
创立一个存储学生对象的汇合,存储 3 个学生对象,应用程序实现在控制台遍历该汇合
1.4.2 代码实现
public class ArrayListDemo4 {public static void main(String[] args) {
//1. 创立汇合对象,用来存储数据
ArrayList<Student> list = new ArrayList<>();
//2. 创立学生对象
Student s1 = new Student("zhangsan",16);
Student s2 = new Student("lisi",15);
Student s3 = new Student("wangwu",18);
//3. 把学生对象增加到汇合中
list.add(s1);
list.add(s2);
list.add(s3);
//4. 遍历
for (int i = 0; i < list.size(); i++) {
//i 顺次示意汇合中的每一个索引
Student stu = list.get(i);
System.out.println(stu.getName() + "," + stu.getAge());
}
}
}
1.5 查找用户的索引
需要:
1,main 办法中定义一个汇合,存入三个用户对象。
用户属性为:id,username,password
2,要求:定义一个办法,依据 id 查找对应的学生信息。
如果存在,返回索引
如果不存在,返回 -1
代码示例:
public class ArrayListDemo6 {public static void main(String[] args) {
/* 需要:1,main 办法中定义一个汇合,存入三个用户对象。用户属性为:id,username,password
2,要求:定义一个办法,依据 id 查找对应的学生信息。如果存在,返回索引
如果不存在,返回 -1*/
//1. 创立汇合对象
ArrayList<User> list = new ArrayList<>();
//2. 创立用户对象
User u1 = new User("001", "zhangsan", "123456");
User u2 = new User("002", "lisi", "1234");
User u3 = new User("003", "wangwu", "1234qwer");
//3. 把用户对象增加到汇合当中
list.add(u1);
list.add(u2);
list.add(u3);
//4. 调用办法,通过 id 获取对应的索引
int index = getIndex(list, "001");
System.out.println(index);
}
//1. 我要干嘛?依据 id 查找对应的学生信息
//2. 我干这件事件须要什么能力实现?汇合 id
//3. 办法的调用处是否须要持续应用办法的后果?// 要用必须返回,不要用能够返回也能够不返回
// 明确阐明须要有返回值 int
public static int getIndex(ArrayList<User> list, String id) {
// 遍历汇合失去每一个元素
for (int i = 0; i < list.size(); i++) {User u = list.get(i);
String uid = u.getId();
if(uid.equals(id)){return i;}
}
// 因为只有当汇合外面所有的元素都比拟完了,能力判定 id 是不存在的。return -1;
}
}
1.6 判断用户的是否存在
public class ArrayListDemo5 {public static void main(String[] args) {
/* 需要:1,main 办法中定义一个汇合,存入三个用户对象。用户属性为:id,username,password
2,要求:定义一个办法,依据 id 查找对应的学生信息。如果存在,返回 true
如果不存在,返回 false*/
//1. 定义汇合
ArrayList<User> list = new ArrayList<>();
//2. 创建对象
User u1 = new User("001","zhangsan","123456");
User u2 = new User("002","lisi","12345678");
User u3 = new User("003","wangwu","1234qwer");
//3. 把用户对象增加到汇合当中
list.add(u1);
list.add(u2);
list.add(u3);
//4. 调用办法,查问 id 是否存在
boolean result = contains(list, "001");
System.out.println(result);
}
// 定义在测试类中的办法须要加 static
//1. 我要干嘛?我要依据 id 查问学生是否存在
//2. 我干这件事件,须要什么能力实现?汇合 id
//3. 办法的调用处是否须要应用办法的后果?// 如果要用,必须返回,如果不必,能够返回也能够不返回
// 然而本题明确阐明须要返回
public static boolean contains(ArrayList<User> list, String id){
// 循环遍历汇合,失去汇合外面的每一个元素
// 再进行判断
for (int i = 0; i < list.size(); i++) {//i 索引 list.get(i); 元素
User u = list.get(i);
// 判断 id 是否存在,我是拿着谁跟谁比拟
// 须要把用户对象外面的 id 拿进去再进行比拟。String uid = u.getId();
if(id.equals(uid)){return true;//return 关键字:作用就是完结办法。}
}
// 只有当汇合外面所有的元素全副比拟结束能力认为是不存在的。return false;
}
}
2. 学生管理系统
2.1 学生管理系统实现步骤
-
案例需要
针对目前咱们的所学内容,实现一个综合案例:学生管理系统。该零碎次要性能如下:
增加学生:通过键盘录入学生信息,增加到汇合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从汇合中删除
批改学生:通过键盘录入要批改学生的学号,将该学生对象其余信息进行批改
查看学生:将汇合中的学生对象信息进行展现
退出零碎:完结程序
-
实现步骤
-
定义学生类,蕴含以下成员变量
private String sid // 学生 id
private String name // 学生姓名
private String age // 学生年龄
private String address // 学生所在地
-
学生管理系统主界面的搭建步骤
2.1 用输入语句实现主界面的编写
2.2 用 Scanner 实现键盘输入
2.3 用 switch 语句实现抉择的性能
2.4 用循环实现性能完结后再次回到主界面 -
学生管理系统的增加学生性能实现步骤
3.1 定义一个办法,接管 ArrayList<Student> 汇合
3.2 办法内实现增加学生的性能
①键盘录入学生信息
②依据录入的信息创立学生对象
③将学生对象增加到汇合中
④提醒增加胜利信息
3.3 在增加学生的选项里调用增加学生的办法 -
学生管理系统的查看学生性能实现步骤
4.1 定义一个办法,接管 ArrayList<Student> 汇合
4.2 办法内遍历汇合,将学生信息进行输入
4.3 在查看所有学生选项里调用查看学生办法 -
学生管理系统的删除学生性能实现步骤
5.1 定义一个办法,接管 ArrayList<Student> 汇合
5.2 办法中接管要删除学生的学号
5.3 遍历汇合,获取每个学生对象
5.4 应用学生对象的学号和录入的要删除的学号进行比拟, 如果雷同,则将以后学生对象从汇合中删除
5.5 在删除学生选项里调用删除学生的办法 -
学生管理系统的批改学生性能实现步骤
6.1 定义一个办法,接管 ArrayList<Student> 汇合
6.2 办法中接管要批改学生的学号
6.3 通过键盘录入学生对象所需的信息,并创建对象
6.4 遍历汇合,获取每一个学生对象。并和录入的批改学生学号进行比拟. 如果雷同,则应用新学生对象替换以后学生对象
6.5 在批改学生选项里调用批改学生的办法 -
退出零碎
应用 System.exit(0); 退出 JVM
-
2.2 学生类的定义
public class Student {
private String id;
private String name;
private int age;
private String address;
// 上面是空参,有参,get 和 set 办法
}
2.3 测试类的定义
public class StudentSystem {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();
loop:
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);
String choose = sc.next();
switch (choose) {case "1" -> addStudent(list);
case "2" -> deleteStudent(list);
case "3" -> updateStudent(list);
case "4" -> queryStudent(list);
case "5" -> {System.out.println("退出");
//break loop;
System.exit(0);// 进行虚拟机运行
}
default -> System.out.println("没有这个选项");
}
}
}
// 增加学生
public static void addStudent(ArrayList<Student> list) {
// 利用空参结构先创立学生对象
Student s = new Student();
Scanner sc = new Scanner(System.in);
String id = null;
while (true) {System.out.println("请输出学生的 id");
id = sc.next();
boolean flag = contains(list, id);
if(flag){
// 示意 id 曾经存在,须要从新录入
System.out.println("id 曾经存在,请从新录入");
}else{
// 示意 id 不存在,示意能够应用
s.setId(id);
break;
}
}
System.out.println("请输出学生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("请输出学生的年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输出学生的家庭住址");
String address = sc.next();
s.setAddress(address);
// 把学生对象增加到汇合当中
list.add(s);
// 提醒一下用户
System.out.println("学生信息增加胜利");
}
// 删除学生
public static void deleteStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);
System.out.println("请输出要删除的 id");
String id = sc.next();
// 查问 id 在汇合中的索引
int index = getIndex(list, id);
// 对 index 进行判断
// 如果 -1,就示意不存在,完结办法,回到初始菜单
if(index >= 0){
// 如果大于等于 0 的,示意存在,间接删除
list.remove(index);
System.out.println("id 为:" + id + "的学生删除胜利");
}else{System.out.println("id 不存在,删除失败");
}
}
// 批改学生
public static void updateStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);
System.out.println("请输出要批改学生的 id");
String id = sc.next();
int index = getIndex(list, id);
if(index == -1){System.out.println("要批改的 id" + id + "不存在,请从新输出");
return;
}
// 当代码执行到这里,示意什么?示意以后 id 是存在的。// 获取要批改的学生对象
Student stu = list.get(index);
// 输出其余的信息并批改
System.out.println("请输出要批改的学生姓名");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输出要批改的学生年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输出要批改的学生家庭住址");
String newAddress = sc.next();
stu.setAddress(newAddress);
System.out.println("学生信息批改胜利");
}
// 查问学生
public static void queryStudent(ArrayList<Student> list) {if (list.size() == 0) {System.out.println("以后无学生信息,请增加后再查问");
// 完结办法
return;
}
// 打印表头信息
System.out.println("id\t\t 姓名 \t 年龄 \t 家庭住址");
// 当代码执行到这里,示意汇合中是有数据的
for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);
System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
// 判断 id 在汇合中是否存在
public static boolean contains(ArrayList<Student> list, String id) {
// 循环遍历汇合失去外面的每一个学生对象
/*for (int i = 0; i < list.size(); i++) {
// 拿到学生对象后,获取 id 并进行判断
Student stu = list.get(i);
String sid = stu.getId();
if(sid.equals(id)){
// 存在,true
return true;
}
}
// 不存在 false
return false;*/
return getIndex(list,id) >= 0;
}
// 通过 id 获取索引的办法
public static int getIndex(ArrayList<Student> list, String id){
// 遍历汇合
for (int i = 0; i < list.size(); i++) {
// 失去每一个学生对象
Student stu = list.get(i);
// 失去每一个学生对象的 id
String sid = stu.getId();
// 拿着汇合中的学生 id 跟要查问的 id 进行比拟
if(sid.equals(id)){
// 如果一样,那么就返回索引
return i;
}
}
// 当循环完结之后还没有找到,就示意不存在,返回 -1.
return -1;
}
}