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


    前导

    举个例子,

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

    这是没有问题的,但是,

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

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

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

    数组和集合的特点对比

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

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

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

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

    集合的泛型

    ArrayList< E >

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

    例如:

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

    常用方法

    ArrayList构造方法和添加方法

    //构造方法
    public ArrayList()
    
    //添加方法
    //将指定的元素加入到集合末尾
    public boolean add(E e)
    
    //将指定的元素加入到指定的索引位置
    public void add(int index,E element)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    1.首先定义一个Student类

    2.创建出对象

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

    //1.首先定义一个Student类
    public class Student {
        private String name;
        private String age;
    
        public Student() {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    //创建出对象,我创建三个为例
    		Student s1 = new Student();
            Student s2 = new Student();
            Student s3 = new Student();
    
    • 1
    • 2
    • 3
    • 4
    //调用add方法
    		ArrayList<Student> arrayList = new ArrayList<>();
            arrayList.add(s1);
            arrayList.add(s2);
            arrayList.add(s3);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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));
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    根据我们的设想,按照操作来,现在应该已经把数据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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

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

    运行结果:

    成功删除

    在这里插入图片描述

    最后

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

  • 相关阅读:
    flutter开发web应用支持浏览器跨域设置
    专升本三本计科仔学习java到实习之路4
    SpringBoot定义优雅全局统一Restful API 响应框架四
    微信小程序地理位置接口使用流程
    C++ 深拷贝、浅拷贝
    排序 算法(第4版)
    理德名人故事:巴菲特传记,“股神”巴菲特的一生
    javascript的call、apply、bind的实现
    未来:spring响应式编程 Hands-On Reactive Programming in Spring 5(三),spring事件监听
    Python工程化管理:package包层次结构组织以及module模块详解
  • 原文地址:https://blog.csdn.net/weixin_47543906/article/details/127417641