Day04-Java集合-ArrayList的使用

一、ArrayList

首先,我们先看看jdk帮助文档是怎么概述ArrayList的:

可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
该size,isEmpty,get,set,iterator和listIterator操作在固定时间内运行。 add操作以摊余常数运行 ,即添加n个元素需要O(n)个时间。 所有其他操作都以线性时间运行(粗略地说)。 与LinkedList实施相比,常数因子较低。
每个ArrayList实例都有一个容量 。 容量是用于存储列表中的元素的数组的大小。 它总是至少与列表大小一样大。 当元素添加到ArrayList时,其容量会自动增长。 没有规定增长政策的细节,除了添加元素具有不变的摊销时间成本。
应用程序可以添加大量使用ensureCapacity操作元件的前增大ArrayList实例的容量。 这可能会减少增量重新分配的数量。

构造方法

ArrayList()
构造一个初始容量为十的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
ArrayList(int initialCapacity)
构造具有指定初始容量的空列表。

arraylist的创建、添加和集合索引越界:

public class ArrayListDemo01 {
    public static void main(String[] args) {
        //ArrayList<String> arrayList = new ArrayList<>();
        ArrayList<String> arrayList1 = new ArrayList<String>();

        arrayList1.add("hello");
        arrayList1.add("world");

        //指定位置添加,原位置的元素往后移动
        arrayList1.add(0,"天龙真人");
        /*
        * 集合的索引越界  IndexOutOfBoundsException: Index: 3, Size: 2
        * 这里集合的长度就只有2,在第三位添加元素,是错误的操作!
         * */
//        arrayList1.add(3,"java");//报错 ndexOutOfBoundsException: Index: 3, Size: 2

        System.out.println(arrayList1);
    }
}

用指定的元素替换列表中指定位置的元素:

public class ArrayListDemo01 {
    public static void main(String[] args) {
        //ArrayList<String> arrayList = new ArrayList<>();
        ArrayList<String> arrayList1 = new ArrayList<String>();

        arrayList1.add("hello");
        arrayList1.add("world");
        //指定位置添加,原位置的元素往后移动
        arrayList1.add(0, "天龙真人");
        /*
         * 集合的索引越界  IndexOutOfBoundsException: Index: 3, Size: 2
         * 这里集合的长度就只有2,在第三位添加元素,是错误的操作!
         * */
//        arrayList1.add(3,"java");//报错 ndexOutOfBoundsException: Index: 3, Size: 2
        System.out.println("替换前:" + arrayList1);
        arrayList1.set(0, "java");//用指定的元素替换此列表中指定位置的元素。
        System.out.println("替换后:" + arrayList1);

    }
}
替换前:[天龙真人, hello, world]
替换后:[java, hello, world]

删除:

//删除操作~
// 直接删除 || 按索引删除
arrayList1.remove("hello");
System.out.println("直接删除后是:"+arrayList1);
arrayList1.remove(1);//删除的是索引1的位置
System.out.println("按索引删除后是:"+arrayList1);
操作前:[天龙真人, hello, world]
直接删除后是:[天龙真人, world]
按索引删除后是:[天龙真人]

get:

        //查:返回指定索引处的元素
        System.out.printf("返回:"+arrayList1.get(2));

二、存储字符串并且遍历

遍历集合

直接上代码:

public class ArrayListDemo02 {
    public static void main(String[] args) {

        //创建一个新的集合对象
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("我是1");
        arrayList.add("我是2");
        arrayList.add("我是3");

        //遍历集合的通用格式
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println("第"+(i+1)+"个元素是:"+arrayList.get(i));
        }
    }
}
第1个元素是:我是1
第2个元素是:我是2
第3个元素是:我是3
遍历集合的通用格式
//遍历集合的通用格式       
 for (int i = 0; i < arrayList.size(); i++) {                         System.out.println("第"+(i+1)+"个元素是:"+arrayList.get(i));            //加一个对象             //遍历集合的通用格式2        
 for (int i = 0; i < arrayList.size(); i++) {           
  String s = arrayList.get(i);            
  System.out.println("第"+(i+1)+"个元素是:"+s);        }

学生信息实例1:

先创建一个学生类:

package com.niit.Collection.List.ArrayList;

/**
 * @author 天龙大帅比
 * @data 2021/6/28 19:05
 */
//学生类
public class StudentDemo {
    int id;
    String name;
    int age;

    public StudentDemo() {
    }

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

    public int getId() {
        return id;
    }

    public void setId(int 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 class ArrayListDemoStudentInfo {
    public static void main(String[] args) {
        ArrayList<StudentDemo> arrayList = new ArrayList<StudentDemo>();

        StudentDemo s1 = new StudentDemo(1,"天龙真人",21);
        StudentDemo s2 = new StudentDemo(1,"小弟1号",20);
        StudentDemo s3 = new StudentDemo(1,"小弟2号",23);

        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        //new printArrayList(arrayList);
        for (int i = 0; i <arrayList.size() ; i++) {
            StudentDemo s = arrayList.get(i);
            System.out.println("id:"+ s.getId() +",name:"+ s.getName() +",age:"+ s.getAge());
        }
    }
}

id:1,name:天龙真人,age:21
id:1,name:小弟1号,age:20
id:1,name:小弟2号,age:23

学生信息实例2

创建学生信息类:

package com.niit.Collection.List.ArrayList;

/**
 * @author 天龙大帅比
 * @data 2021/6/28 19:33
 */
public class StudentInfo {
    String name;
    String age;

    public  StudentInfo(){
    }

    public StudentInfo(String name, String age) {
        this.name = name;
        this.age = age;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

再创建集合,添加键盘输入的元素,再遍历:

public class StudentInfoDemo {
    public static void main(String[] args) {
        ArrayList<StudentInfo> arrayList = new ArrayList<>();

        /*
        for (int i = 0; i <3 ; i++) {
            System.out.println("请输入学生"+(i+1)+"的姓名:");
            String name = scanner.nextLine();
            System.out.println("请输入学生"+(i+1)+"的年龄:");
            String age = scanner.nextLine();

            StudentInfo s = new StudentInfo();
            s.setName(name);
            s.setAge(age);
            //把信息添加进集合
            arrayList.add(s);
        }*/

        addStudentInfo(arrayList,3);
        printArrayList(arrayList);
    }

    //写一个方法,把输入的代码放到方法里,提高代码的复用性
    public static void addStudentInfo(ArrayList<StudentInfo> arrayList,int i) {

        Scanner scanner = new Scanner(System.in);
        for (int j = 0; j <i ; j++) {

            System.out.println("请输入学生" + (j + 1) + "的姓名:");
            String name = scanner.nextLine();
            System.out.println("请输入学生" + (j + 1) + "的年龄:");
            String age = scanner.nextLine();

            StudentInfo s = new StudentInfo();
            s.setName(name);
            s.setAge(age);
            //把信息添加进集合
            arrayList.add(s);
        }
    }
    //遍历集合的通用格式
    public  static void printArrayList(ArrayList<StudentInfo> arrayList) {

        System.out.println("遍历的学生信息如下:");
        for (int i = 0; i <arrayList.size() ; i++) {
            StudentInfo s = arrayList.get(i);
            System.out.println("name:"+ s.getName() +",age:"+ s.getAge());
        }
    }

}
运行结果:
请输入学生1的姓名:
天龙真人
请输入学生1的年龄:
21
请输入学生2的姓名:
小弟一号
请输入学生2的年龄:
20
请输入学生3的姓名:
小弟二号
请输入学生3的年龄:
21
name:天龙真人,age:21
name:小弟一号,age:20
name:小弟二号,age:21

三、一个简单的学生信息管理系统

这个小项目修修改改的弄了一晚上,也算是大致完成了,加深了集合的使用,也复习了之前的一些内容。

首先,肯定要创建一个学生类

这里很简单,就直接上代码了!

package com.niit.Collection.StudentManage;

/**
 * @author 天龙大帅比
 * @data 2021/6/28 20:58
 */
public class Student {
    String sid;
    String name;
    String age;
    String address;

    public Student() {
    }

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

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

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

下面写我们的main方法

思路:

首先,肯定是要把我们学生管理系统的主界面写出来,简单的几个“sout”就行了。然后要给他实现重复选择,加个while循环,当选择“退出系统”的时候跳出while循环。里面放switch方法。之后,写几个静态类方法-分别实现增 删 改 查,放在switch方法调用就行了!

开整开整!!

本来是前一天发的,然后寝室断电没网了,就没发,我再总结一下,然后写一篇单独的博客

上一篇:day04(Debug、基础知识练习)


下一篇:Vue--day04--vue的异步请求