JAVA ArrayList详解

ArrayList 是 Java 中的一个动态数组实现,它属于 Java 集合框架(Java Collections Framework)的一部分。ArrayList 内部是通过一个动态扩展的数组来存储元素的,这意味着当需要添加更多元素而当前数组容量不足时,ArrayList 会自动创建一个更大的数组,并将原有数组的元素复制到新数组中,然后再添加新元素。

主要特点

  1. 动态扩展ArrayList 的大小是动态变化的,可以随着元素的增加自动扩展容量。
  2. 随机访问:由于 ArrayList 内部是使用数组实现的,所以它可以快速地访问任意位置的元素(通过索引)。
  3. 非同步ArrayList 不是线程安全的,如果需要在多线程环境下使用,需要进行额外的同步处理。
  4. 容量与大小ArrayList 有两个重要的属性,capacity(容量)和 size(大小)。容量是 ArrayList 可以存储的最大元素数量,而大小是当前存储在 ArrayList 中的元素数量。

构造函数

  • ArrayList():构造一个初始容量为 10 的空列表。
  • ArrayList(Collection<? extends E> c):构造一个包含指定集合元素的列表,这些元素是按照该集合的迭代器返回的顺序排列的。
  • ArrayList(int initialCapacity):构造一个具有指定初始容量的空列表。

常用方法

  • boolean add(E e):将指定的元素添加到此列表的末尾。
  • void add(int index, E element):将指定的元素插入此列表中的指定位置(可选操作)。
  • E remove(int index):移除此列表中指定位置上的元素(可选操作)。
  • E get(int index):返回列表中指定位置的元素。
  • int size():返回此列表中的元素数。
  • void clear():移除此列表中的所有元素(可选操作)。
  • boolean contains(Object o):如果此列表包含指定的元素,则返回 true

示例

import java.util.ArrayList;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个ArrayList实例  
        ArrayList<String> list = new ArrayList<>();  
  
        // 向ArrayList中添加元素  
        list.add("Apple");  
        list.add("Banana");  
        list.add("Cherry");  
  
        // 访问元素  
        System.out.println(list.get(1)); // 输出 Banana  
  
        // 遍历ArrayList  
        for (String fruit : list) {  
            System.out.println(fruit);  
        }  
  
        // 移除元素  
        list.remove(1); // 移除索引为1的元素,即Banana  
  
        // 检查元素是否存在  
        if (list.contains("Banana")) {  
            System.out.println("Banana is in the list.");  
        } else {  
            System.out.println("Banana is not in the list.");  
        }  
    }  
}

注意事项

  • 在进行大量插入和删除操作时,ArrayList 的性能可能会受到影响,因为数组的大小调整(扩容和缩容)以及元素的移动都是开销较大的操作。
  • 如果需要频繁地在列表中间插入或删除元素,并且不关心元素的插入顺序,那么使用 LinkedList 可能会更合适。
  • 线程安全问题:如果多个线程同时访问一个 ArrayList 实例,并且至少有一个线程从结构上修改了列表,那么它必须保持外部同步。这通常通过同步封装器方法或在调用方法时进行显式同步来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值