Java ArrayList 核心方法学习笔记

一、ArrayList 核心概念

  1. 定义ArrayList 是 Java 集合框架中 List 接口的实现类,底层基于动态扩容的数组实现,用于存储有序、可重复的元素,支持动态增删改查。
  2. 核心特点
    • 长度动态可变,超出容量时自动扩容(默认初始容量 10,扩容后为原容量的 1.5 倍);
    • 允许存储 null 值,元素有序且可重复;
    • 访问元素效率高(通过索引直接访问),增删元素(非末尾)效率较低(需移动后续元素);
    • 仅支持存储引用数据类型(基本数据类型需使用包装类,如 int→Integerchar→Character)。
  3. 使用前提:需导入 java.util.ArrayList 包。

二、ArrayList 初始化

1. 空构造(最常用)

import java.util.ArrayList;

// 创建存储String类型的ArrayList
ArrayList<String> list1 = new ArrayList<>();
// 创建存储Integer类型的ArrayList(对应int基本类型)
ArrayList<Integer> list2 = new ArrayList<>();

2. 指定初始容量

适合提前知道元素数量的场景,减少扩容次数,提升性能:

// 初始容量为20的ArrayList
ArrayList<Double> list3 = new ArrayList<>(20);

3. 基于已有集合初始化:

// 基于数组创建ArrayList
ArrayList<String> list4 = new ArrayList<>(Arrays.asList("Java", "Python", "C++"));

三、ArrayList 核心方法(按使用频率排序)

1. 增:添加元素

方法作用示例代码
add(E e)向列表末尾添加元素list.add("Go"); // 列表:[Go]
add(int index, E e)向指定索引位置插入元素(后续元素自动后移)list.add(1, "PHP"); // 列表:[Go, PHP]
addAll(Collection c)添加另一个集合的所有元素到末尾ArrayList<String> list5 = new ArrayList<>(Arrays.asList("JS", "Ruby")); <br> list.addAll(list5); // 列表:[Go, PHP, JS, Ruby]

2. 删:删除元素

方法作用示例代码
remove(int index)删除指定索引的元素,返回被删除的元素String delElem = list.remove(1); // 删除索引1的PHP,delElem = "PHP"
remove(Object o)删除第一个匹配的元素,返回是否删除成功(boolean)boolean isDel = list.remove("Go"); // 删除元素Go,isDel = true
removeIf(Predicate filter)按条件删除元素(JDK 8+)// 删除长度为2的元素 <br> list.removeIf(elem -> elem.length() == 2);
clear()清空所有元素list.clear(); // 列表变为空

3. 改:修改元素

方法作用示例代码
set(int index, E e)修改指定索引的元素,返回被替换的旧元素String oldElem = list.set(0, "Java"); // 索引0改为Java,oldElem = 原索引0的元素

4. 查:获取元素 / 信息

方法作用示例代码
get(int index)获取指定索引的元素String elem = list.get(0); // 获取索引0的元素
size()获取列表中实际元素个数(区别于数组的 length)int len = list.size(); // 返回当前元素数量
isEmpty()判断列表是否为空(等价于 size() == 0boolean isEmpty = list.isEmpty();
contains(Object o)判断列表是否包含指定元素boolean hasJava = list.contains("Java");
indexOf(Object o)返回指定元素第一次出现的索引,不存在则返回 -1int index = list.indexOf("Java");
lastIndexOf(Object o)返回指定元素最后一次出现的索引,不存在则返回 -1int lastIndex = list.lastIndexOf("Java");

5. 其他常用方法

方法作用示例代码
toArray()将 ArrayList 转为数组Object[] arr = list.toArray();
toArray(T[] a)转为指定类型的数组(推荐)String[] strArr = list.toArray(new String[0]);
sort(Comparator c)自定义排序(JDK 8+)// 按字符串长度升序排序 <br> list.sort((s1, s2) -> s1.length() - s2.length());

四、完整示例代码

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListCoreDemo {
    public static void main(String[] args) {
        // 1. 初始化
        ArrayList<String> langList = new ArrayList<>();

        // 2. 添加元素
        langList.add("Java"); // 末尾添加
        langList.add("Python");
        langList.add(1, "Go"); // 索引1插入
        System.out.println("添加后:" + langList); // [Java, Go, Python]

        // 3. 获取元素/信息
        System.out.println("元素个数:" + langList.size()); // 3
        System.out.println("索引0的元素:" + langList.get(0)); // Java
        System.out.println("是否包含Python:" + langList.contains("Python")); // true
        System.out.println("Go的索引:" + langList.indexOf("Go")); // 1

        // 4. 修改元素
        String oldElem = langList.set(2, "C++");
        System.out.println("修改后:" + langList); // [Java, Go, C++]
        System.out.println("被替换的元素:" + oldElem); // Python

        // 5. 删除元素
        langList.remove(1); // 删除索引1的Go
        System.out.println("删除索引1后:" + langList); // [Java, C++]
        langList.remove("C++"); // 删除元素C++
        System.out.println("删除元素C++后:" + langList); // [Java]

        // 6. 清空&判断空
        langList.clear();
        System.out.println("是否为空:" + langList.isEmpty()); // true
    }
}

五、注意事项

  1. 索引越界问题:调用 get(int index)remove(int index)add(int index, E e) 时,索引需满足 0 ≤ index ≤ size(),否则抛出 IndexOutOfBoundsException
  2. 基本类型存储:不能直接存储 intchar 等基本类型,需使用包装类(IntegerCharacter),JDK 5+ 自动装箱 / 拆箱,无需手动转换:
  3. 遍历方式
    • 普通 for 循环:适合需要索引的场景;
    • 增强 for 循环(foreach):仅遍历元素;
    • 迭代器(Iterator):支持遍历中删除元素(避免 ConcurrentModificationException)。
  4. 总结

  5. ArrayList 是动态数组,核心优势是动态增删元素,提供了丰富的操作方法;
  6. 高频方法:add()(增)、remove()(删)、set()(改)、get()(查)、size()(获取长度);
  7. 注意索引越界、基本类型需用包装类,日常开发中优先使用 ArrayList 替代数组(除非元素数量固定)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值