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


    }
}

 

posted @ 2023-12-28 11:27  马铃薯1  阅读(38)  评论(0)    收藏  举报