24-集合(主要介绍ArrayList)

ArrayList长度可变的原理
1)当创建ArrayList集合容器的时候,底层会存在一个长度为10哥大小的空数组

2)当容器的大小不满足时,创建(扩容)原数组1.5倍大小的新数组

3)将原数组数据,拷贝到新数组中

4)将新元素添加到新数组

ArrayList集合的构造方法
1)public ArrayList():创建一个空的集合容器(这种方式创建的集合,可以添加任何类型的数据)
2)public ArrayList<数据类型> list = new ArrayList<数据类型>():创建一个空的集合容器,并限制集合中存储的元素类型
package com.ArrayListstudent; import java.util.ArrayList; public class ArrayListDemo1 { public static void main(String[] args){ // public ArrayList():创建一个空的集合对象 ArrayList list = new ArrayList(); list.add("hello"); list.add("world"); list.add(123); System.out.println("list:" + list); // public ArrayList<数据类型> list = new ArrayList<数据类型>() // 通过这种方式可以限制集合中存储的元素类型 ArrayList<String> list2 = new ArrayList<String>(); list2.add("hello"); list2.add("world"); System.out.println("list2:" + list2); } }

重点:public ArrayList<数据类型> list = new ArrayList<数据类型>()
这里的数据类型中,是不允许编写基本数据类型的,只能使用基本数据类型所对应的包装类。
主要是因为,JAVA是一门面向对象的语言,但是基本数据类型不具备面向对象的特征,因此JAVA为其提供了对应的包装类。
import java.util.ArrayList; public class ArrayListDemo1 { public static void main(String[] args){ ArrayList<Integer> list1 = new ArrayList<Integer>(); ArrayList<Float> list2 = new ArrayList<Float>(); ArrayList<Double> list3 = new ArrayList<Double>(); ArrayList<Character> list4 = new ArrayList<Character>(); ArrayList<String> list5 = new ArrayList<String>(); } }

ArrayList集合常用的成员方法(增删改查)
1. 增加元素的方法
1)public boolean add(E e):将指定的元素添加到此集合的尾部
2)public void add(int index, E element):在此集合中的指定位置插入指定的元素
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args){ ArrayList<String> list = new ArrayList<String>(); // public boolean add(E e):将指定的元素添加到此集合的尾部 list.add("a"); System.out.println("list:" + list); // public void add(int index, E element):在此集合中的指定位置插入指定的元素 list.add(0, "b"); System.out.println("list:" + list); } }

2. 删除元素的方法
1)public E remove(int index):删除指定索引处的元素,返回被删除的元素
2)public E remove(Object o):删除指定的元素,返回删除是否成功
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args){ ArrayList<String> list = new ArrayList<String>(){{add("a"); add("b"); add("c");}}; System.out.println("初始ArrayList:" + list); // public E remove(int index):删除指定索引处的元素,返回被删除的元素 list.remove(0); System.out.println("list:" + list); // public boolean remove(Object o):删除指定的元素,返回删除是否成功 list.remove("b"); System.out.println("list:" + list); } }

3. 修改元素的方法
public E set(int index, E element):修改指定索引处的元素,返回被修饰的元素
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args){ ArrayList<String> list = new ArrayList<String>(){{add("a"); add("b"); add("c");}}; System.out.println("初始ArrayList:" + list); // public E update(int index, E element):修改指定索引处的元素,返回被修饰的元素 list.set(1, "B"); System.out.println("list:" + list); } }

4. 查找元素的方法
public E get(int index):返回指定索引处的元素
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args){ ArrayList<String> list = new ArrayList<String>(){{add("a"); add("b"); add("c");}}; System.out.println("初始ArrayList:" + list); // public E get(int index):返回指定索引处的元素 System.out.println("索引为0的元素:" + list.get(0)); System.out.println("索引为2的元素:" + list.get(2)); } }

ArrayList集合存储字符串,并遍历
import java.util.ArrayList; public class ArrayListDemo2 { public static void main(String[] args){ ArrayList<String> list = new ArrayList<String>(){{add("a"); add("b"); add("c");}}; for(int i= 0; i < list.size(); i++){ String s = list.get(i); System.out.print(s + "\t"); } } }

案例:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
import java.util.ArrayList; public class ArrayListDemo3 { public static void main(String[] args){ // 需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合 Student s1 = new Student("张三", 23); Student s2 = new Student("李四", 24); Student s3 = new Student("王五", 25); ArrayList<Student> list = new ArrayList<Student>(); list.add(s1); list.add(s2); list.add(s3); for(int i = 0; i < list.size(); i++){ Student s = list.get(i); System.out.println("第" + (i+1) + "个学生信息:" + s.getName() + "\t" + s.getAge()); } } } class Student{ private String name; private int age; public Student(){} public Student(String name, int age){ this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

案例:创建一个学生管理系统,实现增删改查的功能

1. Student类
public class Student { private String id; private String name; private int age; private String birthday; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public Student(String id, String name, int age, String birthday) { this.id = id; this.name = name; this.age = age; this.birthday = birthday; } }
2. 学生管理系统-菜单搭建
import java.util.ArrayList; import java.util.Scanner; public class Test { public static void main(String[] args){ // 创建一个集合对象,用于存储学生数据 ArrayList<Student> list = new ArrayList<Student>(); Scanner sc = new Scanner(System.in); // 管理系统的主界面,初始循环条件为true boolean status = true; while(status){ 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("请输入您的选择:"); switch(sc.nextInt()){ case 1: // System.out.println("添加学生"); addStudent(list, sc); break; case 2: // System.out.println("删除学生"); deleteStudent(list, sc); break; case 3: // System.out.println("修改学生"); updateStudent(list, sc); break; case 4: // System.out.println("查看所有学生"); findAllStudent(list); break; case 5: System.out.println("感谢您的使用,再见!"); status = false; break; default: System.out.println("您的输入有误,请重新输入!"); break; } } } // 添加学生的方法 public static void addStudent(ArrayList<Student> list, Scanner sc){ // 判断集合中是否存在学生对象,如果不存在,就直接添加,如果存在,则遍历集合判断是否有相同的学号,如果有,就提示学号已存在,如果没有,就添加 if(list.isEmpty()){ System.out.println("请输入学生学号:"); String id = sc.next(); System.out.println("请输入学生姓名:"); String name = sc.next(); System.out.println("请输入学生年龄:"); int age = sc.nextInt(); System.out.println("请输入学生出生日期:"); String birthday = sc.next(); // 创建学生对象 Student s = new Student(id, name, age, birthday); // 将学生对象添加到集合中 list.add(s); // 给出添加成功提示 System.out.println("添加学生成功!"); }else{ System.out.println("请输入学生学号:"); String id = sc.next(); // 遍历集合,查找学号对应的学生对象,如果找到,就提示学号已存在,如果没有找到,则添加操作 for(int i=0; i<list.size(); i++){ if(list.get(i).getId().equals(id)){ System.out.println("很抱歉,您输入的学号已存在,请重新输入!"); break; }else{ System.out.println("请输入学生姓名:"); String name = sc.next(); System.out.println("请输入学生年龄:"); int age = sc.nextInt(); System.out.println("请输入学生出生日期:"); String birthday = sc.next(); // 创建学生对象 Student s = new Student(id, name, age, birthday); // 将学生对象添加到集合中 list.add(s); // 给出添加成功提示 System.out.println("添加学生成功!"); } } } } // 删除学生的方法 public static void deleteStudent(ArrayList<Student> list, Scanner sc){ // 判断集合中是否存在学生对象,如果不存在,就提示暂无学生信息,如果存在,则遍历集合判断是否有相同的学号,如果有,就删除,如果没有,就提示学号不存在 if(list.isEmpty()){ System.out.println("暂无学生信息,请先添加学生信息!"); }else{ System.out.println("请输入要删除的学生学号:"); String id = sc.next(); // 遍历集合,查找学号对应的学生对象,如果找到,就删除 for(int i = 0; i < list.size(); i++){ Student s = list.get(i); if(s.getId().equals(id)){ list.remove(i); System.out.println("删除学生成功!"); break; } } } } // 修改学生的方法 public static void updateStudent(ArrayList<Student> list, Scanner sc){ // 判断集合中是否存在学生对象,如果不存在,就提示暂无学生信息,如果存在,则遍历集合判断是否有相同的学号,如果有,就修改,如果没有,就提示学号不存在 if(list.isEmpty()){ System.out.println("暂无学生信息,请先添加学生信息!"); }else{ System.out.println("请输入要修改的学生学号:"); String id = sc.next(); // 遍历集合,查找学号对应的学生对象,如果找到,就修改 for(int i = 0; i < list.size(); i++) { if (list.get(i).getId().equals(id)) { System.out.println("请输入学生新姓名:"); String name = sc.next(); System.out.println("请输入学生新年龄:"); int age = sc.nextInt(); System.out.println("请输入学生新出生日期:"); String birthday = sc.next(); // 创建学生对象 Student newStudent = new Student(id, name, age, birthday); // 将新的学生对象替换旧的学生对象 list.set(i, newStudent); System.out.println("修改学生成功!"); break; } else { System.out.println("很抱歉,您输入的学号不存在,请重新输入!"); } } } } // 查看所有学生的方法 public static void findAllStudent(ArrayList<Student> list){ // 判断集合中是否存在学生对象,如果不存在,就提示暂无学生信息,如果存在,则遍历集合打印所有学生信息 if(list.isEmpty()){ System.out.println("暂无学生信息,请先添加学生信息!"); }else{ System.out.println("学号\t\t\t\t姓名\t\t\t\t年龄\t\t\t\t生日"); for (Student student : list) { System.out.println(student.getId() + "\t\t\t\t" + student.getName() + "\t\t\t\t" + student.getAge() + "\t\t\t\t" + student.getBirthday()); } } } }

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号