• Java《ArrayLIst》


    ArrayList 介绍

    ArrayList 背后是一个顺序表,它可以指定存放任意类型的数据
    ArrayList类 称动态数组, 同时实现了 Collection List 接口,其内部数据结构由数组实现
    在这里插入图片描述
    ArrayLIst类 是在 java.util 包里面,Java 集合类一般都是在 java.util 包

    • Arraylist 是以泛型方式实现的,使用必须要先实例化
    • ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
    • ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
    • ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
    • ArrayList不是线程安全的,在单线程下可以使用
    • ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

    ArrayList 的使用

    • ArrayList 里有:
      add(添加)
      contains(判定是否包含某个元素)
      indexOf(查找某个元素对应的位置)
      get(获取 某个 位置的元素)
      set(给 某个 位置的元素设为 某个值)
      remove(删除第一次出现的某个值)
      clear(清空顺序表)

    ArrayList的构造方法

    • ArrayList 有 三个构造方法:
      1 无参的构造方法 ArrayList( )
      2 根据传入的数值大小,创建指定长度的数组 ArrayList( int initialCapacite)
      3 通过传入Collection元素列表进行生成 ArrayList(Collection c)

    例如:

    public static void main(String[] args) {
       
            // 无参构造方法  默认数组大小为 10
            ArrayList<Integer> arrayList = new ArrayList<>();
            arrayList.add(1);
            arrayList.add(2);
            System.out.println(arrayList);
            // 传入指定参构造方法  初始数组大小为 15
            ArrayList<Integer> arrayList2 = new ArrayList<>(15);
            arrayList2.add(3);
            arrayList2.add(4);
            System.out.println(arrayList2);
    
            // 那 arr2 的数据存放到 arr3 里
            ArrayList<Integer> arrayList3 = new ArrayList<>(arrayList2);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ArrayLIst 里的源代码

    在这里插入图片描述

    ArrayLIst 无参数构造方法

    public ArrayList() {
       
            this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
        }
    
    • 1
    • 2
    • 3
    • 4

    这个构造方法是没有分配数组内存空间的
    当我们调用不带参数的构造方法,使用第一个add方法存储数据到 ArrayLIst 数组时,才会把当前数组开辟 10 个空间
    如果存放超过数组大小元素时,是采用 1.5 倍扩容

    ArrayList 常用方法

    add 方法

    add :添加新的元素

    方法 方法功能
    add(E e) 将元素添加到当前列表的末尾
    add (int index,E element) 在当前列表的指定位置添加指定元素
    addAll(Collection c) 将指定的列表添加到此列表的尾部
    addAll( int index,Collection c ) 在当前数组的指定位置添加指定的数组

    示范:

     public static void main(String[] args) {
       
            ArrayList<Integer> arrayList = new ArrayList<>();
            arrayList.add(1);
            arrayList.add(2);
            System.out.println(arrayList);
    
            // 把 0 下标的元素修改为 66
            arrayList.add(0,66);
            System.out.println(arrayList);
    
            ArrayList<Integer> arrayList2 = new ArrayList<>();
            arrayList2.add(3);
            arrayList2.add(4);
            // addAll 是把另一个数组里的所以元素添加到这个数组元素的末尾
            arrayList.addAll(arrayList2);
            System.out.println(arrayList);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行结果:

    在这里插入图片描述

    remove 方法

    remove :删除指定的元素

    方法 方法功能
    remove (int index ) 删除该顺序表中指定下标的元素
    remove (Object o) 删除该顺序表中第一个指定的元素
    removeAll(Collection c) 删除指定集合包含的所有元素
    retainAll() (Collection c) 除了指定的元素,其他元素全部删除
    public static void main(String[] args) {
       
            ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("小明"); arrayList.add("小红");
            arrayList.add("黑狗"); arrayList.add("白兔");
            arrayList.add("金刚"); arrayList.add("黑狗");
            arrayList.add("玄武");
            System.out.println("最开始:" + arrayList);
    
            // remove 删除 1 下标的元素
            String s = arrayList.remove(1);
            System.out.println("删除 1 下标元素后:" + arrayList);
    
            // remove 删除指定变量名字,要用 boolean 来判断是否删除成功
            boolean flag1 = arrayList.remove("小明");
            System.out.println("删除 小明 后:" + arrayList);
    
            // 删除指定的顺序表里所有相同的元素
            ArrayList<String> str = new ArrayList<>();
            str.add("黑狗");
            // 在arrayList 顺序表里 删除 str 里包含的所有相同的元素
            boolean flag2 = arrayList.removeAll(str);
            System
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    22.支持向量机—高斯核函数
    2022 年 360反馈的好处(所有企业规模)
    如何修复Python中的缩进错误?
    HJ5 进制转换
    SpringBoot SpringBoot 原理篇 1 自动配置 1.15 自动配置原理【1】
    JavaWeb相关
    [附源码]SSM计算机毕业设计基于社区生鲜配送系统JAVA
    Spring Cloud(十四):微服务灰度发布 --- Discovery
    PHP+经贸时间轴 毕业设计-附源码211617
    【FPGA小波变换】基于FPGA的图像9/7整数小波变换verilog实现
  • 原文地址:https://blog.csdn.net/m0_66483195/article/details/127216705