深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)

四、ArrayList 常用方法实战 —— 从添加到遍历的全场景覆盖

ArrayList 提供了数十个方法,但日常开发中常用的只有 10 个左右,我们按 “元素操作”“集合查询”“遍历方式” 三类来梳理,每个方法都附带示例和注意事项。

4.1 元素添加:add () 与 addAll ()

添加元素是 ArrayList 最基础的操作,核心方法有两个:add(E e)(添加单个元素到尾部)和addAll(Collection<? extends E> c)(添加另一个集合的所有元素到尾部)。

4.1.1 add (E e):尾部添加单个元素

源码核心逻辑:先检查是否需要扩容,再将元素添加到elementData[size],最后size++

public boolean add(E e) {
    // 确保容量足够(size+1:因为要添加1个元素)
    ensureCapacityInternal(size + 1);
    // 将元素添加到数组的size位置(此时size是当前元素个数,索引从0开始)
    elementData[size++] = e;
    return true;
}

示例:

List<Integer> list = new ArrayList<>();
list.add(10); // 添加成功,返回true
list.add(20);
System.out.println(list); // 输出:[10, 20]
System.out.println(list.size()); // 输出:2(元素个数)

注意:add()方法永远返回true(因为 ArrayList 允许添加任意元素,不会因 “元素已存在” 而返回 false,这与 Set 的add()不同)。

4.1.2 add (int index, E element):指定索引插入元素

除了尾部添加,还可以在指定索引位置插入元素,但需要注意:插入位置会导致后续元素 “向后移动”,时间复杂度为 O (n),频繁使用会影响性能。

示例:

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
// 在索引1的位置插入"c"(原索引1的"b"向后移动到索引2)
list.add(1, "c");
System.out.println(list); // 输出:[a, c, b]

注意:如果指定的索引index超出[0, size]范围(即index < 0index > size),会抛出IndexOutOfBoundsException(索引越界异常)。

4.1.3 addAll (Collection<? extends E> c):添加另一个集合的所有元素

示例:

List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");

List<String> list2 = new ArrayList<>();
list2.add("c");
list2.add("d");

// 将list2的所有元素添加到list1尾部
list1.addAll(list2);
System.out.println(list1); // 输出:[a, b, c, d]

addAll()返回boolean:如果集合因添加操作发生了变化(即 c 不为空),返回true;如果 c 为空,返回

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值