Java基础知识之ArrayList

1.集合概述

ArrayList是集合中的一种,它支持索引。

2.ArrayList集合快速入门

ArrayList集合的对象获取:
	public ArrayList( )    创建一个空的集合对象
ArrayList集合添加元素的方法:
	public boolean add( E e)   将指定的元素追加到此集合的末尾
	public void add(int index , E element)  在此集合中的指定位置插入指定的元素
import java.util.ArrayList;

public class List {
    
    
    //需求: 创建ArrayList对象,代表集合容器,往里面添加元素
    public static void main(String[] args) {
    
    
        //1.创建ArrayList集合的对象
        ArrayList list = new ArrayList();

        //2. 添加数据
        list.add("Java");
        list.add("Java");
        list.add("MySQL");
        list.add(12);
        list.add(12.3);
        list.add('a');
        System.out.println(list.add('中'));
        System.out.println(list);

        //3.给指定索引位置插入元素
        list.add(1,"你好中国");
        System.out.println(list);



    }
}
输出结果:
true
[Java, Java, MySQL, 12, 12.3, a,]
[Java, 你好中国, Java, MySQL, 12, 12.3, a,]

总结:
1.ArrayList类如何创建集合对象的,如何添加元素?
ArrayList list = new ArrayList();
public boolean add(E e)
public void add(int index, E element)

3.ArrayList对于泛型的支持

泛型概述:
			ArrayList<E>:其实就是一个泛型,可以在编译阶段约束集合对象只能操作某种数据类型.
		举个例子:
			ArrayList<String>:此集合只能操作字符串类型的元素,
			ArrayList<Integer>:此集合只能操作整数类型的元素
注意:集合中只能存储引用类型,不支持基本数据类型.
import java.util.ArrayList;

public class List1 {
    
    
    /*
    目标: 能够使用泛型约束ArrayList集合操作的数据类型
    * */
    public static void main(String[] args) {
    
    
        //首先定义一个整数型集合
        ArrayList<Integer> list = new ArrayList<>();
        // 注意这个list集合中,只能添加int类型的数据,否则就会报错
         list.add(12);
         list.add(100);

        // 然后我们在定义一个String类型的集合,注意这里只能添加String类型的数据
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("你好");
        list1.add("中国");

        System.out.println(list);
        System.out.println(list1);
    }
}
输出结果:
[12, 100]
[你好, 中国]

总结:
1.怎么去统一ArrayList集合操作的元素类型?
使用泛型:<数据类型>
ArrayList list1 = new ArrayList();

4.ArrayList常用API、遍历

在这里插入图片描述

import java.util.ArrayList;

public class List3 {
    
    
    public static void main(String[] args) {
    
    
        //定义一个集合,然后依次运用下面这些API
        ArrayList<Integer> list = new ArrayList<>();
        list.add(12);
        list.add(256);
        list.add(144);
        list.add(11);
        list.add(16);
        System.out.println(list);
        // 1.public E get(int index) 返回指定索引处的元素
        int a = list.get(1);
        System.out.println(a);
        // 2.public int size() 返回集合中的元素的个数
        System.out.println(list.size());
        // 3.public E remove(int index) 删除指定索引处的元素,返回被删除的元素
        int c = list.remove(2);
        System.out.println(c);
        System.out.println(list);
        //4.public boolean remove(Object o) 删除指定的元素,返回删除是否成功  注意因为我们删除的是集合中的 Integer型不是int型,所以要加Integer
        System.out.println(list.remove((Integer) 256));
        System.out.println(list);
        System.out.println(list.remove((Integer) 11));
        System.out.println(list);
        // 5.public E set(int index, E element) 修改指定索引处的元素,返回被修改的元素
        int e = list.set(0,15);
        System.out.println(e);
    }
}
输出结果:
[12, 256, 144, 11, 16]
256
5
144
[12, 256, 11, 16]
true
[12, 11, 16]
true
[12, 16]

5.ArrayList集合案例:遍历并删除元素

需求:
	某个班级的考试在系统 上进行,成绩大致为:98,77,66,89,79,50,100,
	现在需要先把成绩低于80分一下的数据去掉
分析:
	定义ArrayList集合存储多名学员的成绩.
	遍历集合每个元素,如果元素值低于80分,去掉它
import java.util.ArrayList;

public class List4 {
    
    
    public static void main(String[] args) {
    
    
        //定义一个集合将所有的成绩都录入进去
        ArrayList<Integer> scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);
        System.out.println(scores);
        //2.遍历集合每个元素,如果元素低于80分,去掉它
        for (int i = scores.size() - 1; i >= 0 ; i--) {
    
    
            int score = scores.get(i);
            // 判断这个分数是否低于80分,如果低于就从集合中删掉它
            if (score < 80){
    
    
                scores.remove(i);
            }
            
        }
        System.out.println(scores);
    }
}
输出结果:
[98, 77, 66, 89, 79, 50, 100]
[98, 89, 100]

注意点:
1.从集合中遍历元素,并筛选出元素删除它,应该怎么解决?
从集合后面遍历然后删除,可以避免漏掉元素.
2.要注意i= scores -1 这样才是从最后一个开始的

6.ArrayList集合案例:存储自定义类型

需求:
		某影院系统需要在后台存储上述三部电影,然后依次展示出来
分析:
		1.三部电影是3个对象,定义一个电影类,定义一个集合存储电影类
		2.创建3个电影对象,封装相关数据,把3个对象存入到集合中.

首先我们先定义类:

public class Movie {
    
    
    private String name;
    private double score;
    private String actor;

    public String getName() {
    
    
        return name;
    }

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

    public double getScore() {
    
    
        return score;
    }

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

    public String getActor() {
    
    
        return actor;
    }

    public void setActor(String actor) {
    
    
        this.actor = actor;
    }

    public Movie(String name, double score, String actor) {
    
    
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public Movie() {
    
    
    }
}

然后我们再定义集合然后把movie添加进去

import java.util.ArrayList;

public class List5 {
    
    
    public static void main(String[] args) {
    
    
        // 1.定义一个电影类:Movie
        // 2.定义一个ArrayList集合存储这些影片对象
        ArrayList<Movie> movies = new ArrayList<>();

        // 3.创建影片对象封装电影数据,把对象加入到集合中去.
        movies.add(new Movie("十二生肖",9.7,"成龙"));
        movies.add(new Movie("除暴",8.5,"吴彦祖"));
        movies.add(new Movie("人民的名义",9.9,"侯亮平"));
        System.out.println(movies); //这里打印出来的只是存储在堆内存的地址

        // 所以我们需要遍历集合然后将集合中的数据打印出来
        for (int i = 0; i < movies.size(); i++) {
    
    
            Movie movie = movies.get(i);
            System.out.println("片名: " + movie.getName());
            System.out.println("评分: " + movie.getScore());
            System.out.println("评分: " + movie.getActor());
        }
    }
}
输出结果:
[com.Array.Movie@49e4cb85, com.Array.Movie@2133c8f8, com.Array.Movie@43a25848]
片名: 十二生肖
评分: 9.7
评分: 成龙
片名: 除暴
评分: 8.5
评分: 吴彦祖
片名: 人民的名义
评分: 9.9
评分: 侯亮平

注意:
集合中存储的元素并不是对象本身,而是对象的地址.

7.ArrayList集合案例:元素搜索

需求:
	 1.后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能
分析:
     1.定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来.
     2.提供一个方法,可以接受ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示
     3.使用死循环,让用户可以不停的搜索.

那么我们先定义一个学生类:


public class Student {
    
    
    private String studyid;
    private String name;
    private int age;
    private String className;

    public Student() {
    
    
    }

    public Student(String studyid, String name, int age, String className) {
    
    
        this.studyid = studyid;
        this.name = name;
        this.age = age;
        this.className = className;
    }

    public String getStudyid() {
    
    
        return studyid;
    }

    public void setStudyid(String studyid) {
    
    
        this.studyid = studyid;
    }

    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 getClassName() {
    
    
        return className;
    }

    public void setClassName(String className) {
    
    
        this.className = className;
    }
}

然后我们在定义一个集合用来展示其数据

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

public class List6 {
    
    
    public static void main(String[] args) {
    
    
        ArrayList<Student> students = new ArrayList<>();
        //1.定义一个学生类,后期用于创建对象封装学生数据
        //2.定义一个集合对象用于装学生对象
        students.add(new Student("201801302", "大师兄", 23, "护理一班"));
        students.add(new Student("202001111", "沙师兄", 56, "信息一班"));
        students.add(new Student("201001002", "八师兄", 18, "科学一班"));
        students.add(new Student("201201102", "吴彦祖", 19, "体育一班"));
        System.out.println("学号\t\t名称\t年龄\t\t班级");

        // 3.遍历集合中的每个对象并展示其数据
        for (int i = 0; i < students.size(); i++) {
    
    
            Student s = students.get(i);
            System.out.println(s.getStudyid() + "\t\t" + s.getClassName() + "\t" + s.getAge() + "\t" + s.getClassName());
        }
            //4.让用户不断的输入学号,可以不断搜索该学生对象信息并展示出来(独立成方法)
            Scanner sc = new Scanner(System.in);
            while (true) {
    
    
                System.out.println("请你输入你要查询的学生的学号:");
                String id = sc.next();
                Student s = getStudentByStudyId(students, id);
                // 判断学号是否存在
                if (s == null) {
    
    
                    System.out.println("查不到此人");
                } else {
    
    
                    //找到了该学生 信息如下
                    System.out.println(s.getStudyid() + "\t\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName());

                }
            }


    }

        public static Student getStudentByStudyId (ArrayList < Student > students, String studyid){
    
    
            //根据学号,去集合中找出学生对象并返回
            for (int i = 0; i < students.size(); i++) {
    
    
                Student s = students.get(i);
                if (s.getStudyid().equals(studyid)) {
    
    
                    return s;
                }
            }
            return null;
        }
    }

输出结果:
学号		名称	年龄		班级
201801302		护理一班	23	护理一班
202001111		信息一班	56	信息一班
201001002		科学一班	18	科学一班
201201102		体育一班	19	体育一班
请你输入你要查询的学生的学号:
202001111
202001111		沙师兄	56	信息一班
请你输入你要查询的学生的学号:
201201102
201201102		吴彦祖	19	体育一班
请你输入你要查询的学生的学号:
201001002
201001002		八师兄	18	科学一班
请你输入你要查询的学生的学号:

加油…!!!

猜你喜欢

转载自blog.csdn.net/tyloonulinuli/article/details/121747444
今日推荐