# ArrayList

# ArrayList 的基本概述

之前我们学习过:要存储 1 名学员信息,我们就创建一个 Student 对象。
Student stu = new Student(“刘备”,22,“男”);
那么,如果我们想存储 100 名学员信息,就会面临以下问题:
Student stu1 = new Student(“刘备”,22,“男”);
Student stu2 = new Student(“冠寓”,25,“男”);
......
Studnet stu100 = new Student(“武松”,28,“男”);
要定义 100 个变量名!!
无法遍历,要找一个最大年龄的不好操作!!
这时候我们就需要一个:容器。
数组:缺点,长度固定!
Java 为我们提供了一个类:ArrayList——使用它时,没有长度限制!
示例代码:

import java.util.ArrayList;

/*
之前存储多个数据的时候使用数组去存储?

数组特点:一旦初始化(创建),长度就固定。


由于数组的具有长度固定的缺点,所以java这边提供一个不固定长度的类我们去使用ArrayList.

ArrayList也是一个存储数据的容器。而且也是可以存储多个数组的容器


 */
public class Demo1 {

    public static void main(String[] args) {
        //创建了一个长度为3的数组
//        int[] arr = new int[3];
        //上面数组最多可以存储3个数组,因为数组的长度已经固定了。
//        arr[0] =11;
//        arr[1] =22;
//        arr[2] =33;
//        arr[3] = 44;

        //创建一个ArrayList
        ArrayList list = new ArrayList();
        //添加数组
        list.add(11);
        list.add(22);
        list.add(33);
        list.add(44);
        list.add(55);
        list.add(66);
        list.add(77);
        list.add(88);
        list.add(99);
        list.add(0);

        System.out.println(list);



    }
}

# ArrayList 的使用方式

构造方法:ArrayList():构造一个空的 ArrayList 集合

ArrayList list = new ArrayList();

# ArrayList 常用的方法

  • public boolean add (E e) 将指定的元素追加到此集合的末尾 .【排队】
E是什么?当定义集合时,“泛型”是什么类型,这个E就是什么类型:

ArrayList<String> list = new ArrayList<>();//add()方法的参数就是String类型
  • public void add (int index,E element) 在此集合中的指定位置插入指定的元素 【插队】
  • public boolean remove (Object o) 删除指定的元素,返回删除是否成功。返回值:是否删除成功!
  • public E remove (int index) 删除指定索引处的元素,返回被删除的元素。返回值:被删除的对象!
  • public E set (int index,E element) 修改指定索引处的元素,返回被修改的元素
  • public E get (int index) 返回指定索引处的元素
  • public int size () 返回集合中的元素的个数

示例代码:

import java.util.ArrayList;

/*
 1).public boolean add (E e)  将指定的元素追加到此集合的末尾 .【排队】

 2).public void  add (int  index,E  element) 在此集合中的指定位置插入指定的元素 【插队】

 3).public boolean remove (Object o)  删除指定的元素,返回删除是否成功。返回值:是否删除成功!

 4).public E remove (int  index) 删除指定索引处的元素,返回被删除的元素。返回值:被删除的对象!

5).public E set (int  index,E element) 修改指定索引处的元素,返回被修改的元素

6).public E get (int  index) 返回指定索引处的元素

7).public int size ()  返回集合中的元素的个数


 */
public class Demo1 {

    public static void main(String[] args) {
        //1. 创建ArrayList
        ArrayList<String> list = new ArrayList<>();  //<String> 表示该集合对象只能添加String类型的数据
        //添加元素
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        System.out.println("当前元素的内容:"+list); //[张三, 李四, 王五, 赵六]

        //删除元素
        boolean flag  = list.remove("张三"); //删除成功返回ture,否则返回false
        //根据索引删除
        list.remove(0); //删除张三之后,李四就是索引值为0的元素
        System.out.println("删除成功吗?"+flag);
        System.out.println("删除之后元素的内容:"+list); //[张三, 李四, 王五, 赵六]

        //根据索引修改指定位置的元素
        list.set(0,"狗娃"); //王五修改为狗娃
        System.out.println("修改之后元素的内容:"+list); //[张三, 李四, 王五, 赵六]
        System.out.println("0号索引的元素:"+list.get(0)); //

        System.out.println("集合的元素个数:"+ list.size());
    }
}

# 遍历数组、集合、字符串方式的区别

import java.util.ArrayList;

/*
目标: 对比集合遍历方式、数组遍历方式,字符串的遍历方式。

 */
public class Demo3 {

    public static void main(String[] args) {
        //调用方法
//        listPrint();

        stringPrint();
    }

    //目前的方法并不是描述某一类事务的行为的时候,同学们可以添加static。如果你是描述某一类事物的行为的方法则不能添加static。比如:Student
    public static void listPrint(){
        //创建一个集合
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        list.add("张三"); //0
        list.add("李四"); //1
        list.add("王五"); //2
        //遍历集合每一个元素,然后输出
        for (int i = 0; i < list.size(); i++) {
            String item = list.get(i);//根据索引值获取集合的元素
            System.out.print(item+",");
        }
    }



    //遍历数组  length
    public static void arrayPrint(){
        int[] arr = {98,87,24,56,78};
        for (int i = 0; i < arr.length; i++) {
            int item = arr[i];
            System.out.print(item+",");
        }
    }

    //遍历字符串
    public static void stringPrint(){
        String str = "我们班考试考出第一名!恭喜";
        for (int i = 0; i <str.length(); i++) {
            //指定索引值获取字符
            char item = str.charAt(i);
            System.out.print(item+",");
        }
    }
}

# ArrayList 集合练习

# 第一题

1).定义学生类,包含以下成员属性:
姓名、性别、年龄、分数
要求:私有成员属性、无参、全参构造方法、get/set 方法
2).定义 main()方法,初始化三名学员信息,并存储到 ArrayList 集合中
3).遍历集合,打印每名学员信息
Student 类

public class Student {

    //姓名
    private String name;

    //年龄
    private int age;

    //性别
    private String sex;

    //分数
    private double score;


    //生成getter与setter、全参的构造方法  alt+insert


    public Student() {
    }

    public Student(String name, int age, String sex, double score) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.score = score;
    }

    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}

StudentDemo

import java.util.ArrayList;

/*
1).定义学生类,包含以下成员属性:
          姓名、性别、年龄、分数
     要求:私有成员属性、无参、全参构造方法、get/set方法
2).定义main()方法,初始化三名学员信息,并存储到ArrayList集合中
3).遍历集合,打印每名学员信息
 */
public class Demo3 {
    public static void main(String[] args) {
        //1. 创建集合
        ArrayList<Student> list = new ArrayList<>();
        //2. 创建三个学生对象 ,创建对象需要看类的构造方法,因为创建对象需要使用到构造方法的。
        Student s1 = new Student("狗娃",18,"男",98);
        Student s2 = new Student("狗剩",19,"男",88);
        Student s3 = new Student("铁蛋",20,"女",99);
        //把学生对象存储到集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);

        //3.遍历集合,打印每一位学员的信息
        for (int i = 0; i <list.size() ; i++) {
            //根据索引值取出学生
            Student s = list.get(i);
            System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
        }
    }
}

# 第二题: 基于第一题基于控制台录入学员的信息

import java.util.ArrayList;
import java.util.Scanner;

/*
1).使用上题的“学生类”;
2).在main()方法中,通过控制台接收3名学员信息,并存储到ArrayList集合中;
3).遍历集合,打印每名学员信息

 */
public class Demo4 {
    public static void main(String[] args) {
        //1. 创建集合
        ArrayList<Student> list = new ArrayList<>();
        //2. 键盘录入三位学员的信息,然后存储到集合
        Scanner sc = new Scanner(System.in);
        //使用循环循环三次,录入三位学员的信息,每一次循环创建一个学生对象

        for (int i = 0; i <3 ; i++) {
            System.out.println("请输入姓名:");
            String name = sc.next(); //接收名字保存name变量中
            System.out.println("请输入性别:");
            String sex = sc.next(); //接收性别保存sex变量中
            System.out.println("请输入年龄:");
            int age = sc.nextInt(); //接收年龄保存age变量中
            System.out.println("请输入分数:");
            double score =  sc.nextDouble(); //接收一个小数保存到score变量中
            //创建一个学生对象
            Student s = new Student(name,age,sex,score);
            //添加到集合中
            list.add(s);
        }
        //3.遍历集合,打印每一位学员的信息
        for (int i = 0; i <list.size() ; i++) {
            //根据索引值取出学生
            Student s = list.get(i);
            System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
        }
    }
}

# 第三题: 定义方法打印集合内容

import java.util.ArrayList;
import java.util.Scanner;

/*
1).使用上题的“学生类”;
2).在main()方法中,通过控制台接收3名学员信息,并存储到ArrayList集合中;
3).筛选出分数大于90分的学员,然后存储到新集合中并且打印新集合
 */
public class Demo5 {

    public static void main(String[] args) {
        //1. 创建集合
        ArrayList<Student> list = new ArrayList<>();
        //2. 键盘录入三位学员的信息,然后存储到集合
        Scanner sc = new Scanner(System.in);
        //使用循环循环三次,录入三位学员的信息,每一次循环创建一个学生对象

        for (int i = 0; i <3 ; i++) {
            System.out.println("请输入姓名:");
            String name = sc.next(); //接收名字保存name变量中
            System.out.println("请输入性别:");
            String sex = sc.next(); //接收性别保存sex变量中
            System.out.println("请输入年龄:");
            int age = sc.nextInt(); //接收年龄保存age变量中
            System.out.println("请输入分数:");
            double score =  sc.nextDouble(); //接收一个小数保存到score变量中
            //创建一个学生对象
            Student s = new Student(name,age,sex,score);
            //添加到集合中
            list.add(s);
        }

        //3).筛选出分数大于90分的学员,然后存储到新集合中并且打印新集合
        ArrayList<Student>  newList=new ArrayList<>();

        for (int i = 0; i <list.size() ; i++) {
            //取出每一位学员
            Student s = list.get(i);
            if(s.getScore()>=90){
                //则需要把该学生添加到新集合中
                newList.add(s);
            }
        }

        //4. 遍历新集合
        for (int i = 0; i <newList.size() ; i++) {
            Student s = newList.get(i);
            System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
        }
    }
}

# 学员管理系统-集合版