Java入门(ArrayList)

ArrayList

对象数组

数组:数组是容器,可以存放多个类型一致的数据。数组一旦定义长度不能变化。

特点:元素类型相同,长度不可变

定义一个数组:类型

数组存储类型[] 数组名;
数组存储类型 数组名[];
类型可以是任何的类型:基本数据类型,引用数据类型

如果是我们自己定义的类型当作数组的类型:例如Student类型,
Student[] students;
Student students[];

students = new Student[3];

Student类型定义的数组,元素存储的一定是Student类型的数据。肯定是Student的对象。

/*
定义学生类,创建三个学生对象,放到学生类的数组中
 */
public class Demo01 {
    public static void main(String[] args) {
        //创建三个学生对象
        Student s1 = new Student("迪丽热巴", 18);
        Student s2 = new Student("马儿扎哈", 20);
        Student s3 = new Student("古力娜扎", 17);

        //放到学生类的数组中
        Student[] students = new Student[3];
        //给元素赋值
        students[0] = s1;
        students[1] = s2;
        students[2] = s3;

        //遍历数组打印元素的属性值
        for (int i = 0; i < students.length; i++) {
            Student stu = students[i];
            //System.out.println("stu = " + stu);//打印地址
            System.out.println(stu.getName() + ":" + stu.getAge()); //获取属性值打印
        }

        //数组弊端:长度固定,如果有多的数据不能存储
        // Student s4 = new Student("蔡徐坤", 20);
        // students[3] = s4;

        //集合:也是容器,跟数组不一样的是,长度可变了。
    }
}
ArrayList的概述及使用步骤

ArrayList是一个集合:集合也是容器,可以存储多个数据,长度可变化

ArrayList使用步骤:

在这里插入图片描述

希望集合创建后只能存储某一特定类型的数据。需要借助泛型。

ArrayList:中E就是泛型,泛指任意的引用数据类型。

E的作用:是为了指定集合所能存储的类型,如果要存储某种类型的数据时,只要将E换成这个类型即可。

【例如】

要定义一个集合用来存储字符串数据【String】 E–>String

ArrayList<String> list = new ArrayList<>();    

要定义个集合用来存储学生对象数据【Student 】 E–>Student

ArrayList<Student> list = new ArrayList<>();

对象调用方法

在这里插入图片描述

ArrayList<String> list = new ArrayList<>();  
//E -->String  所有改类方法中的Edouard变成 String
list.add("Hello");
ArrayList常用方法
boolean add(E e)将指定的元素添加到此列表的尾部。
E remove(int index) 移除此列表中指定位置上的元素。 
boolean remove(Object o) 除此列表中首次出现的指定元素(如果存在)。 
E set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。 
E get(int index)  返回此列表中指定位置上的元素。 

void clear() 移除此集合中的所有元素。 
boolean contains(Object o) 如果此列表中包含指定的元素,则返回 trueboolean isEmpty() 如果此列表中没有元素,则返回 true 
int size() 返回此列表中的元素数。
String,StringBuilder,ArrayList,基本数据类型,不打印地址,打印内容!
当ArrayList中存储基本数据类型,字符串类型的数据时,能够直接打印内容。
    原因:
        String,StringBuilder,ArrayList 继承Object类,重写了里面的toString方法。
/*
【增删改查】
boolean add(E e)将指定的元素添加到此列表的尾部。
E remove(int index) 移除此列表中指定位置上的元素。
boolean remove(Object o) 除此列表中首次出现的指定元素(如果存在)。
E set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。
E get(int index)  返回此列表中指定位置上的元素。

void clear() 移除此集合中的所有元素。
boolean contains(Object o) 如果此列表中包含指定的元素,则返回 true。
boolean isEmpty() 如果此列表中没有元素,则返回 true
int size() 返回此列表中的元素数。

String,StringBuilder,ArrayList,基本数据类型
当ArrayList中存储基本数据类型,字符串类型的数据时,能够直接打印内容。

 */
public class Demo01 {
    public static void main(String[] args) {
        //创建一个存储字符串数据的集合
        ArrayList<String> list = new ArrayList<>();

        //boolean add(E e)将指定的元素添加到此列表的尾部。
        //E->String: 创建对象时指定的
        list.add("唐僧");//0
        list.add("悟空");//1
        list.add("八戒");//2
        list.add("沙僧");//3
        list.add("小白龙");//4
        System.out.println(list.size() + ":" + list); //5:[唐僧, 悟空, 八戒, 沙僧, 小白龙]

        //集合的元素也是很有索引的,索引范围数组一样[0,size-1]
        //E remove(int index) 移除此列表中指定位置上的元素。
        String remove = list.remove(4);//小白龙
        System.out.println("remove = " + remove);//小白龙
        System.out.println(list.size() + ":" + list); //4:[唐僧, 悟空, 八戒, 沙僧]

        //boolean remove(Object o) 除此列表中首次出现的指定元素(如果存在)。
        //删除八戒
        boolean remove1 = list.remove("八戒");
        System.out.println("remove1 = " + remove1);//true
        System.out.println(list.remove("白骨精"));//false
        System.out.println(list.size() + ":" + list); //3:[唐僧, 悟空, 沙僧]

        //E set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。
        //把“悟空"换成"斗战胜佛"
        String set = list.set(1, "斗战胜佛");
        System.out.println("set = " + set);//悟空
        System.out.println(list.size() + ":" + list); //3:[唐僧, 斗战胜佛, 沙僧]

        //E get(int index)  返回此列表中指定位置上的元素。
        //获取沙僧,索引在2位置
        String get = list.get(2);
        System.out.println("get = " + get);//沙僧

        //void clear() 移除此集合中的所有元素。
        // list.clear();
        // System.out.println(list.size() + ":" + list); //0:[]

        //boolean contains(Object o) 如果此列表中包含指定的元素,则返回 true。
        //判断是否存在"沙僧"
        System.out.println(list.contains("沙僧"));//true
        //判断是否存在"小白龙"
        System.out.println(list.contains("小白龙"));//false
        System.out.println("========");
        //boolean isEmpty() 如果此列表中没有元素,则返回 true
        System.out.println(list.isEmpty());//false
        list.clear();
        System.out.println(list.isEmpty());//true

        //int size() 返回此列表中的元素数。

    }
}
ArrayList遍历

集合遍历:访问集合中元素

小技巧:
【集合名.fori】:自增遍历

//【集合名.fori】:自增遍历
for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
}

不需要:list.size().fori

【集合名.forr】:自减遍历

//【集合名.forr】:自减遍历
for (int i = list.size() - 1; i >= 0; i--) {
      System.out.println(list.get(i));
}

【注意】list.size().forr: int i = list.size(); i > 0,list.size()不会减1,i不会等于0
/*
遍历打印集合
 */
public class Demo02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("唐僧");//0
        list.add("悟空");//1
        list.add("八戒");//2
        list.add("沙僧");//3
        list.add("小白龙");//4

        int size = list.size();
        for (int i = 0; i < size; i++) {
            System.out.println(list.get(i));
        }
        System.out.println("=====");

        //小技巧:
        //【集合名.fori】:自增遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("=====");
        //【集合名.forr】:自减遍历
        for (int i = list.size() - 1; i >= 0; i--) {
            System.out.println(list.get(i));
        }
    }
}
ArrayList存储基本数据类型
如何存储基本数据类型:
1)集合中的泛型E, 用来限定集合能够存储的类型。类型只能是引用数据类型。

如果要存储基本数据类型,那么我们需要将基本数据类型转化为引用数据类型。
byte            Byte
short           Short
int             Integer
long            Long
float           Float
double          Double
char            Character 
boolean         Boolean
基本数据类型      包装类型

基本数据类型和包装类型之间可以自动完成转化。
自动装箱:基本数据类型自动转化为包装类型
自动拆箱:包装类型自动转化为基本数据类型

Ctrl+Shift+U:大小写转化
public class Demo01 {
    public static void main(String[] args) {
        //ArrayList<int> list = new ArrayList<int>();

        //定义集合存储int类型的数据。
        ArrayList<Integer> list = new ArrayList<>();
        list.add(100); //自动装箱:基本数据类型自动转化为包装类型
        list.add(200);

        System.out.println("list = " + list);

    }
}
ArrayList练习:集合添加字符串并遍历
/*
创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
 */
public class Demo01 {
    public static void main(String[] args) {
        //创建一个存储字符串的集合,存储3个字符串元素
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");
        list.add("Java");

        for (int i = 0; i < list.size(); i++) {
            //get
            String s = list.get(i);
            System.out.println("s = " + s);
        }
    }
}
ArrayList练习:对象添加到集合
/*
创建一个存储学生对象的集合,存储3个学生对象,
使用程序实现在控制台遍历该集合打印对象属性值
 */
public class Demo02 {
    public static void main(String[] args) {
        //创建集合存储学生对象
        ArrayList<Student> list = new ArrayList<>();
        //创建三个学生对象
        Student s1 = new Student("迪丽热巴", 18);
        Student s2 = new Student("马儿扎哈", 20);
        Student s3 = new Student("古力娜扎", 17);
        //把学生对象放到集合中
        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(s.getName()+":"+s.getAge());
        }
    }
}
ArrayList练习:ArrayList存储学生对象并遍历升级版
/*
创建一个存储学生对象的集合,存储3个学生对象,
使用程序实现在控制台遍历该集合打印对象属性值

升级:学生的姓名和年龄要键盘录入
 */
public class Demo03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //创建集合存储学生对象
        ArrayList<Student> list = new ArrayList<>();
        //创建三个学生对象
        //Student s1 = new Student("迪丽热巴", 18);
        //Student s2 = new Student("马儿扎哈", 20);
        //Student s3 = new Student("古力娜扎", 17);
        //把学生对象放到集合中
        //list.add(s1);
        //list.add(s2);
        //list.add(s3);


        //通过键盘输入来定义对象内容 【升级】
        for (int i = 0; i < 3; i++) { //3次循环

            System.out.println("请输入名字");
            String name = sc.next();
            System.out.println("请输入年龄");
            int age = sc.nextInt();
            Student stu = new Student(name, age); //创建对象,name,age 数据来自键盘录入
            list.add(stu); //添加对象到集合
        }



        //遍历集合,打印学生属性值
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getName()+":"+s.getAge());
        }
    }
}
ArrayList练习:ArrayList类型作为参数
/*
定义以指定格式打印集合的方法(ArrayList类型作为参数),
使用[]扩起集合,使用“, ”分隔每个元素。格式参照 [元素, 元素, 元素]。
 */
public class Demo04 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("AAA");
        list.add("AAA");
        list.add("AAA");
        list.add("AAA");
        list.add("AAA");

        printArray(list); //调用方法执行

    }


    public static void printArray(ArrayList<String> list) {
        //使用[]扩起集合,使用“, ”分隔每个元素。格式参照 [元素, 元素, 元素]。
        System.out.print("[");
        //遍历集合打印元素
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1) {
                //是最后一个元素: 元素]

                System.out.println(list.get(i)+"]");
            } else {
                //不是最后一个元素: 元素,
                System.out.print(list.get(i)+", ");
            }
        }
    }
}
ArrayList练习:ArrayList类型作为返回值
/*
定义一个方法,返回一个装有10个[20,50]之间随机数的集合,在mian方法中调用并遍历输出元素
 */
public class Demo05 {
    public static void main(String[] args) {
        //4:调用方法得到了集合
        ArrayList<Integer> nums = getNums();
        //5:遍历输出集合中的随机数
        for (int i = 0; i < nums.size(); i++) {
            System.out.println(nums.get(i));
        }
    }

    public static ArrayList<Integer> getNums() {
        //1:创建存储随机数的集合
        ArrayList<Integer> list = new ArrayList<>();
        //2:创建Random对象生成随机数:10个[20,50]
        Random rd = new Random();
        //借助10次循环生成随机数,放到集合
        for (int i = 0; i < 10; i++) {
            //[20,50] = [0,30]+20
            int num = rd.nextInt(31) + 20;
            list.add(num);
        }
        //3:返回集合对象
        return list;
    }
}
学生管理系统

在这里插入图片描述

  • 1.欢迎界面
/*
 * 1.欢迎界面
 * 2.查看学生
 * 3.添加学生
 * 4.删除学生
 * 5.修改学生
 * 6.退出系统
 * 7.其他提醒
 * */
public class ManageStudent {
    public static void main(String[] args) {
        while (true) {
            System.out.println("====欢迎来到学生管理系统====");
            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);
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("查看所有学生");
                    break;
                case 2:
                    System.out.println("添加学生");
                    break;
                case 3:
                    System.out.println("删除学生");
                    break;
                case 4:
                    System.out.println("修改学生");
                    break;
                case 5:
                    System.out.println("退出");
                    break;
                default:
                    System.out.println("没有这个功能!敬请期待!!!");
            }
        }
    }
}
  • 2.查看学生

    /*
        查看学生信息
        Ctrl+Alt+M:抽取方法
     */
    private static void lookStudents(ArrayList<Student> students) {
        if (students.isEmpty()) {
            System.out.println("没有学生信息,请录入学生信息!");
            return;//结束方法
        }
        System.out.println("学号\t姓名\t年龄\t居住地");
        //遍历学生集合,打印学生属性值
        for (int i = 0; i < students.size(); i++) {
            Student stu1 = students.get(i);
            System.out.println(stu1.getId() + "\t" + stu1.getName() + "\t" + stu1.getAge() + "\t" + stu1.getAddress());
        }
    }
    
  • 3.添加学生

    private static void addStudent(ArrayList<Student> students) {
        //键盘输入学生信息
        Scanner sc = new Scanner(System.in);
        String id;
        while (true) {
            System.out.println("请输入学生学号:");
             id = sc.next();
            //判断输入的学号在集合中是否存在有相同学号的学生
            //设计一个方法:判断学号是否存在,如果存在返回索引,否则索引为-1
            int index = findStudent(id, students);
            if (index == -1) {
                break;
            } else {
                System.out.println("学号已存在,请重新输入");
            }
        }
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        System.out.println("请输入学生地址:");
        String address = sc.next();
        //构建学生对象
        Student stu1 = new Student(id,name,age,address);
        //添加到集合
        students.add(stu1);
        //提示录入成功
        System.out.println("恭喜您,添加学生成功!!");
    }
    //查找学号为id的学生索引,如果不存在返回-1,存在返回实际的索引
    private static int findStudent(String id, ArrayList<Student> students) {
        //遍历集合,获取学生对象的学号,和参数id比较
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            if (s.getId().equals(id)) {
                //找到了一个学号相同的学生,返回索引
                //如果相同返回索引
                return i;
            }
        }
        //没有找到相同学号的学生对象,集合中没有这个学号
        return -1;
    }
    
  • 4.删除学生

    private static void removeSutdent(ArrayList<Student> students) {
        //1:键盘输入一个学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要删除学生的学号:");
        String id = sc.next();
        //2:找到学号对应的索引进行删除,如果存在删除,不存在不用删除
        int index = findStudentById(id, students);
        if (index == -1) {
            System.out.println("没有您要删除的学生!!");
        } else {
            students.remove(index);//删除学生
            System.out.println("恭喜,删除成功!!");
        }
    }
    
  • 5.修改学生

    //更新学生信息
    private static void updateStudent(ArrayList<Student> students) {
        //1:键盘输入一个需要修改学生的学号
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要修改学生的学号:");
        String id = sc.next();
        //2:获取学号对应在集合中学生的索引
        int index = findStudentById(id, students);
        if (index == -1) {
            System.out.println("没有找到您要修改的学生信息!!");
        } else {
            //3:通过索引获取要修改信息的学生
            Student stu1 = students.get(index);//就是要修改的对象
            System.out.println("请输入学生姓名:");
            String name = sc.next();
            System.out.println("请输入学生年龄:");
            int age = sc.nextInt();
            System.out.println("请输入学生地址:");
            String address = sc.next();
    
            //更新信息
            stu1.setName(name);
            stu1.setAge(age);
            stu1.setAddress(address);
    
            //更新回到集合
            students.set(index, stu1);
    
            System.out.println("恭喜!!修改信息成功!!");
        }
    }
    
  • 6.退出系统

    case 5:
        //System.out.println("退出");
        System.out.println("欢迎下次光临!!Bye!!");
        System.exit(0); //0表示正常退出,JVM
    
        break;
    
  • 7.其他提醒

    default:
        System.out.println("没有这个功能,敬请期待!!");
        break;
    

学生管理系统【完整版】

package com.com.arraylist.学生管理系统;

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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 getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

package com.com.arraylist.学生管理系统;

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

/*
 * 1.欢迎界面
 * 2.查看学生
 * 3.添加学生
 * 4.删除学生
 * 5.修改学生
 * 6.退出系统
 * 7.其他提醒
 * */
public class ManageStudent {
    public static void main(String[] args) {

        ArrayList<Student> students = new ArrayList<>();
        Student stu1 = new Student("1","张三",18,"上海");
        Student stu2 = new Student("2","李四",18,"北京");

        students.add(stu1);
        students.add(stu2);

        while (true) {
            System.out.println("====欢迎来到学生管理系统====");
            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);
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
//                    System.out.println("查看所有学生");
                    queryStudents(students);
                    break;
                case 2:
//                    System.out.println("添加学生");
                    addStudent(students);
                    break;
                case 3:
//                    System.out.println("删除学生");
                    removeStudent(students);
                    break;
                case 4:
//                    System.out.println("修改学生");
                    updateStudent(students);
                    break;
                case 5:
//                    System.out.println("退出");
                    System.out.println("欢迎下次光临!!!");
                    System.exit(0); // 0表示正常退出JVM
                    break;
                default:
                    System.out.println("没有这个功能!敬请期待!!!");
            }
        }
    }

    /**
     * 修改学生
     * @param students
     */
    private static void updateStudent(ArrayList<Student> students) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您要修改学生的学号:");
        String id = scanner.next();
        int index = findStudentById(id, students);
        if (index == -1) {
            System.out.println("要修改的学生信息不存在!!!");
        }else {
            Student student = students.get(index);
            Scanner scanner1 = new Scanner(System.in);
            System.out.println("请输入学生姓名:");
            String name = scanner1.next();
            System.out.println("请输入学生年龄:");
            int age = scanner1.nextInt();
            System.out.println("请输入学生地址:");
            String address = scanner1.next();

            student.setName(name);
            student.setAge(age);
            student.setAddress(address);

//                        不需要设置回去,因为Student student = students.get(index)获取到的是地址
//                        修改地址里的内容,集合里对应的内容也会发生改变

//                        为了便于理解【将修改的内容更新回到集合】
            students.set(index,student);
            System.out.println("修改成功!!!");
        }
    }

    /** 删除学生
     * @param students
     */
    private static void removeStudent(ArrayList<Student> students) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您要删除学生的学号:");
        String id = scanner.next();
        int index = findStudentById(id, students);
        if (index == -1) {
            System.out.println("要删除的学生不存在!!!");
        }else {
            students.remove(index);
            System.out.println("删除成功!!!");
        }
    }

    /** 添加学生
     * @param students
     */
    private static void addStudent(ArrayList<Student> students) {
        Scanner scanner = new Scanner(System.in);
        String id;
        while (true) {
            System.out.println("请输入学生学号:");
            id = scanner.next();
            int index = findStudentById(id,students);
            if (index == -1) {
                break;
            }else {
                System.out.println("学号已存在!请重新输入!!!");
            }
        }

        System.out.println("请输入学生姓名:");
        String name = scanner.next();
        System.out.println("请输入学生年龄:");
        int age = scanner.nextInt();
        System.out.println("请输入学生地址:");
        String address = scanner.next();

        Student student = new Student(id, name, age, address);
        students.add(student);
        System.out.println("添加学生成功!!!");
    }

    /** 查找学号为id的学生的索引,不存在返回-1,存在返回实际的索引
     * @param id
     * @param students
     * @return
     */
    private static int findStudentById(String id, ArrayList<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            if (student.getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }

    /** 查看学生信息
     * @param students
     */
    private static void queryStudents(ArrayList<Student> students) {
        if (students.isEmpty()) {
            System.out.println("没有学生信息,请录入学生信息!");
            return; //结束方法
        }
        System.out.println("学号\t姓名\t年龄\t居住地");
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            System.out.println(student.getId() + "\t\t" + student.getName() + "\t" + student.getAge() + "\t\t" + student.getAddress());
        }
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值