ArrayList用法详解(Java)

ArrayList

Java 集合框架中最常用的类之一。ArrayList基于数组的动态数组,它提供了动态增长和缩减容量的功能,因此非常适合存储和操作元素数量可变的集合。

一、底层原理:

1. 数组

ArrayList 使用一个数组来存储元素。初始时,ArrayList 创建一个固定大小的数组来保存元素。当数组已满时,ArrayList 会创建一个新的更大的数组,并将所有元素从旧数组复制到新数组中。

2. 动态增长

当向 ArrayList 中添加元素时,它会检查当前数组是否已满。如果数组已满,ArrayList 会创建一个新的数组,其大小通常是当前数组大小的两倍,然后将所有元素从旧数组复制到新数组中。这样做的目的是为了避免在添加新元素时频繁地调整数组的大小,从而提高性能。

3. 数组大小调整策略

ArrayList 实现了一种称为 “grow” 的策略,即当数组容量不足时,新数组的大小通常是当前数组大小的两倍。这种策略旨在平衡内存占用和性能。通常情况下,ArrayList 的添加操作的时间复杂度是 O(1),但在数组容量不足时可能会触发 O(n) 的复制操作,其中 n 是当前元素数量。

4. 容量控制

ArrayList 允许通过 ensureCapacity(int minCapacity) 方法手动设置底层数组的容量。这个方法可以用于在大量元素添加之前预先分配足够的内存,以提高性能。

总之,ArrayList 底层原理是基于数组实现的,通过动态增长和调整数组大小来实现动态数组的功能。这种设计使得 ArrayList 在添加、删除元素时能够保持较好的性能表现。

二、用法示例:

1. 创建 ArrayList

import java.util.ArrayList;

// 创建一个 ArrayList 对象
ArrayList<String> list = new ArrayList<>();

2. 添加元素

// 添加单个元素
list.add("Apple");

// 在指定位置添加元素
list.add(1, "Banana");

3. 获取元素

// 获取指定位置的元素
String fruit = list.get(0);

4. 修改元素

// 修改指定位置的元素
list.set(0, "Orange");

5. 删除元素

// 删除指定位置的元素
String removedElement = list.remove(1);

// 删除指定元素的第一个匹配项
boolean isRemoved = list.remove("Banana");

6. 获取大小

// 获取 ArrayList 的大小(元素数量)
int size = list.size();

7. 检查是否为空

// 检查 ArrayList 是否为空
boolean isEmpty = list.isEmpty();

8. 迭代遍历

// 使用 for-each 循环遍历 ArrayList
for (String item : list) {
    System.out.println(item);
}

// 使用迭代器遍历 ArrayList
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    System.out.println(item);
}

9. 转换为数组

// 将 ArrayList 转换为数组
String[] array = list.toArray(new String[0]);

10. 清空 ArrayList

// 清空 ArrayList
list.clear();
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻师傅

谢谢您!我会继续努力创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值