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; }}