Java ArrayList 基础详解

在 Java 中,当我们需要存储多个数据时,数组虽然能用,但固定长度的特性往往不够灵活 —— 比如想动态添加或删除元素时,数组就显得力不从心。这时,ArrayList作为最常用的集合类之一,就能完美解决这个问题。今天这篇文章,我们就从基础出发,结合实例聊聊ArrayList的核心特性、创建方式以及必备操作,帮你快速上手这个 “动态数组”。

一、为什么需要 ArrayList?

先想想数组的痛点:假设你定义了一个长度为 3 的数组String[] arr = new String[3],当你想存第 4 个元素时,只能重新创建一个更长的数组,把原有元素复制过去 —— 这操作不仅麻烦,还浪费内存。

ArrayList本质是一个 “动态数组”,它的长度可以自动扩容,我们无需关心底层如何实现,只需调用方法就能轻松添加、删除元素。简单说,ArrayList 就是为 “动态管理一组数据” 而生的

它的优势很明显:

  • 长度可变,无需手动扩容
  • 提供了丰富的方法操作元素(增删改查一键搞定)
  • 支持泛型,能限定存储的数据类型(避免类型混乱)

二、ArrayList 的创建:泛型是关键

创建ArrayList的语法很简单,但泛型的使用是核心—— 它能规定集合中只能存某种类型的元素,避免运行时出现类型错误。

基本语法:

// 完整写法:指定泛型类型(存储String类型元素)
ArrayList<String> list = new ArrayList<String>();

// 简化写法(JDK 7+支持):后面的泛型可省略
ArrayList<String> list = new ArrayList<>();

注意点:

  • 泛型只能写引用类型(如StringInteger),不能写基本类型(如intdouble)。如果要存整数,可用ArrayList<Integer>
  • 创建后直接打印list,会显示元素内容(如[]表示空集合),而不是地址值 —— 这是 Java 对集合类的特殊处理,方便调试。

三、ArrayList 核心操作:CRUD 一站式掌握

ArrayList的常用方法围绕 “增删改查(CRUD)” 展开,我们结合实例一个个讲清楚:

1. 增:添加元素(add()

boolean add(E e):向集合末尾添加元素,返回true(几乎永远成功,可忽略返回值)。

ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list); // 输出:[aaa, bbb, ccc]

如果想在指定位置插入元素,可用add(int index, E e)

list.add(1, "xxx"); // 在索引1的位置插入"xxx"
System.out.println(list); // 输出:[aaa, xxx, bbb, ccc]

2. 删:删除元素(remove()

有两种删除方式,根据场景选择:

  • 按元素删除boolean remove(E e)
    删除第一个匹配的元素,返回是否删除成功(存在则删除并返回true,否则false)。

    // 删除"xxx"
    boolean isRemoved = list.remove("xxx");
    System.out.println(isRemoved); // 输出:true
    System.out.println(list); // 输出:[aaa, bbb, ccc]
  • 按索引删除E remove(int index)
    删除指定索引的元素,返回被删除的元素(需注意索引越界问题)。

    // 删除索引0的元素
    String removed = list.remove(0);
    System.out.println(removed); // 输出:aaa(被删除的元素)
    System.out.println(list); // 输出:[bbb, ccc]

3. 改:修改元素(set()

E set(int index, E e):修改指定索引的元素,返回被替换的旧元素。

// 将索引0的元素改为"ddd"
String old = list.set(0, "ddd");
System.out.println(old); // 输出:bbb(被替换的旧元素)
System.out.println(list); // 输出:[ddd, ccc]

4. 查:查询元素(get() + size()

  • E get(int index):获取指定索引的元素。
  • int size():获取集合的长度(元素个数)。

结合循环遍历所有元素:

// 遍历集合
for (int i = 0; i < list.size(); i++) {
    String element = list.get(i);
    System.out.println(element);
}
// 输出:
// ddd
// ccc

四、ArrayList 的注意事项

  1. 索引越界问题
    调用get(index)remove(index)set(index)时,若index超出[0, size-1]范围,会抛出IndexOutOfBoundsException。务必注意循环中索引的边界(用size()判断)。

  2. 泛型的好处
    若不指定泛型(如ArrayList list = new ArrayList()),集合可以存任意类型元素,容易出现ClassCastException(类型转换异常)。建议始终指定泛型,比如ArrayList<Integer>存整数,ArrayList<Student>存自定义对象。

  3. 与数组的转换
    若需要将ArrayList转为数组,可用toArray()方法:

    String[] arr = list.toArray(new String[0]); // 转为String数组

五、什么时候用 ArrayList?

  • 需要动态添加 / 删除元素时(替代固定长度的数组)。
  • 频繁查询元素(get(index)效率高,底层是数组实现,随机访问快)。
  • 存储一组同类型数据(通过泛型约束)。

比如:存储用户列表、商品列表、成绩记录等场景,ArrayList都是首选。

六、总结

ArrayList作为 Java 中最基础的集合类,核心价值在于 “动态管理数据”。本文从创建方式(泛型的重要性)讲到 CRUD 操作(增删改查的具体方法),再到实际使用的注意事项,覆盖了初学者必备的知识点。

建议多动手练习:比如用ArrayList实现一个简单的 “学生管理系统”,包含添加学生、删除学生、查询所有学生等功能,通过实战加深理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值