数据结构【ArrayLIst】

本文详细介绍了ArrayList的内部实现、常用方法,包括构造方法、add、remove、get/set、contains、toArray、indexOf、clear、subList等。讨论了ArrayList的优缺点,指出其在插入删除操作上的效率问题,并提供了示例代码展示ArrayList的使用场景。最后,通过实际例子说明ArrayList在处理学生信息排序、字符串处理和扑克牌游戏等场景的应用。
摘要由CSDN通过智能技术生成

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 <? extends E> 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);
    }

ArrayLIst 里的源代码

在这里插入图片描述

ArrayLIst 无参数构造方法

public ArrayList() {
   
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

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

ArrayList 常用方法

add 方法

add :添加新的元素

方法 方法功能
add(E e) 将元素添加到当前列表的末尾
add (int index,E element) 在当前列表的指定位置添加指定元素
addAll(Collection<? extends E> c) 将指定的列表添加到此列表的尾部
addAll( int index,Collection<? extends E e> 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);
    }

执行结果:

在这里插入图片描述

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.out.println("删除arrayList里所有的 黑狗 后:" + arrayList);

        // 在arrayList 顺序表里,ret的元素除外,其他元素全部删除
        ArrayList<String> ret = new ArrayList<>();
        ret
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值