Java基础之ArrayList集合(最简单最详细)

前导

举个例子,

例如我们班上本来有10个同学,我们定义一个数组来存储每个同学的名字。

这是没有问题的,但是,

在这个时候我们班上来了一个插班生,那现在我们班上的总人数是11,数组的长度在定义的时候就已经确定了,如果想装下这11个人又需要定义一个新的长度能装下11的数组,那每一次的人员变动都会导致现有的数组不可用。

那么我们有没有一个比较好的解决方式呢?、

今天我们即将学习的集合ArrayList可以帮助我们解决这个问题。

数组和集合的特点对比

集合类:提供一种存储空间可变的存储模型,存储的容量可以发生改变。

共同点:他们都可以存储数据。

不同点:数组的容量是固定的,在数组定义的时候就已经确定了,集合的容量是可以改变的。

集合类非常多,我们先学习ArrayList类

集合的泛型

ArrayList< E >

这个E代表我们存入的引用数据类型,意思就是说在我们定义的这个集合里,存储的都是E这个类型的数据。

例如:

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

常用方法

ArrayList构造方法和添加方法

//构造方法
public ArrayList()

//添加方法
//将指定的元素加入到集合末尾
public boolean add(E e)

//将指定的元素加入到指定的索引位置
public void add(int index,E element)

使用:
我们接着前导里说的来实现加入插班生。

1.首先定义一个Student类

2.创建出对象

3.使用add方法将学生加入到集合中

//1.首先定义一个Student类
public class Student {
    private String name;
    private String age;

    public Student() {
    }
}
//创建出对象,我创建三个为例
		Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();
//调用add方法
		ArrayList<Student> arrayList = new ArrayList<>();
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);

ArrayList常用方法

方法名说明
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()返回集合中的元素的个数

ArrayList的遍历

先用size()方法取得集合的长度,再像数组那样进行遍历

代码:

public static void main(String[] args) {
        //新建一个集合
        ArrayList<String> arrayList = new ArrayList<>();
        //将数组添加到集合中
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");
        System.out.println(arrayList);
        //遍历输出集合中的数据
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }
    }

ArrayList删除中的小问题

思路:

我们删除集合中的数据

1.先遍历集合,拿到每一个元素
2.通过每一个元素的比较,如果是我们想要删除的数据,则进行删除

例子:删除"c"

public static void main(String[] args) {
        //新建一个集合
        ArrayList<String> arrayList = new ArrayList<>();
        //将数组添加到集合中
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");
        arrayList.add("c");
        arrayList.add("c");
        arrayList.add("c");
        System.out.println(arrayList);
        //遍历输出集合中的数据
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }

        //删除数据c
        for (int i = 0; i < arrayList.size(); i++) {
            if("c".equals(arrayList.get(i))){
                arrayList.remove(i);
            }
        }
        System.out.println(arrayList);
    }

根据我们的设想,按照操作来,现在应该已经把数据c删除了

运行结果:

在这里插入图片描述

集合中还是存在"c"?

这其中存在一个问题,就是你删除完一个元素之后,后面的元素位置都往前移动了

原来的数据是a b c d c c c

当遇到第一个c并删除后,得 a b d c c c

在这里插入图片描述
第二个c索引本来是4,删除后索引变成了3,导致集合的长度减少,在进行
i < arrayList.size()的时候直接退出循环,导致删除失败

解决方法:

public static void main(String[] args) {
        //新建一个集合
        ArrayList<String> arrayList = new ArrayList<>();
        //将数组添加到集合中
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("d");
        arrayList.add("c");
        arrayList.add("c");
        arrayList.add("c");
        System.out.println(arrayList);
        //遍历输出集合中的数据
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }

        //删除数据c
        for (int i = 0; i < arrayList.size(); i++) {
            if("c".equals(arrayList.get(i))){
                arrayList.remove(i);
                i--;
            }
        }
        System.out.println(arrayList);
    }

在这里插入图片描述

只需要加上这一步,如果删除成功使i的值-1,然后再去for循环中的i++,相当于下一个判断的位置还是当前位置。

运行结果:

成功删除

在这里插入图片描述

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值