ArrayList详解

ArrayList详解

1.什么是ArrayList

ArrayList 是 Java 中的一种动态数组实现,它是 Java 集合框架的一部分
与传统的数组不同,ArrayList 可以根据需要动态调整其大小
ArrayList 继承自 AbstractList 类,并实现了 List 接口

2.ArrayList有哪些特点

  • 动态数组大小
    传统数组的大小是固定的,而 ArrayList 可以根据元素的增加或减少动态调整其大小
  • 有序
    ArrayList 保持元素的插入顺序,即元素按照插入的顺序排列
  • 随机访问
    ArrayList 允许快速的随机访问元素,因为 ArrayList 是基于数组实现的,所以可以通过索引直接访问元素,时间复杂度为 O(1)
  • 允许重复
    ArrayList 允许存储重复的元素
  • 允许 null 值
    ArrayList 允许存储 null 值

3.ArrayList的基本使用方法

演示代码

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args) {
        // 创建一个ArrayList
        ArrayList<String> list = new ArrayList<>();
        
        // 添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        
        // 打印ArrayList
        System.out.println("ArrayList: " + list);
        
        // 访问元素
        System.out.println("list下标为1的值是: " + list.get(1));
        
        // 修改元素
        list.set(1, "Blueberry");
        System.out.println("修改后的list: " + list);
        
        // 删除下标为2的元素
        list.remove(2);
        System.out.println("删除后的list: " + list);
        
        // ArrayList 的大小
        System.out.println("ArrayList 的大小: " + list.size());
    }
}

输出结果

ArrayList: [Apple, Banana, Cherry]
list下标为1的值是: Banana
修改后的list: [Apple, Blueberry, Cherry]
删除后的list: [Apple, Blueberry]
ArrayList 的大小: 2

4.ArrayList常用方法

方法描述示例代码
add(E e)在列表的末尾添加指定的元素list.add("Apple");
add(int index, E e)在列表的指定位置插入指定的元素list.add(1, "Banana");
get(int index)返回列表中指定位置的元素String fruit = list.get(1);
set(int index, E e)用指定的元素替换列表中指定位置的元素list.set(1, "Cherry");
remove(int index)移除列表中指定位置的元素list.remove(1);
remove(Object o)移除列表中首次出现的指定元素(如果存在)list.remove("Apple");
clear()移除列表中的所有元素list.clear();
size()返回列表中的元素数量int size = list.size();
isEmpty()如果列表不包含元素,则返回 trueboolean empty = list.isEmpty();
contains(Object o)如果列表包含指定的元素,则返回 trueboolean contains = list.contains("Apple");
indexOf(Object o)返回列表中第一次出现的指定元素的索引int index = list.indexOf("Apple");
lastIndexOf(Object o)返回列表中最后一次出现的指定元素的索引int lastIndex = list.lastIndexOf("Apple");
toArray()返回包含列表中所有元素的数组Object[] array = list.toArray();
iterator()返回列表中元素的迭代器Iterator<String> it = list.iterator();

5.ArrayList指定创建方法

ArrayList 的默认长度为 10

/**
 * 默认初始长度
 * Default initial capacity.
 */
private static final int DEFAULT_CAPACITY = 10;

可以指定长度创建 ArrayList

/**
 * 构造具有指定初始容量的空列表
 * @param  指定列表的初始容量
 * @throws 如果指定的初始容量为负,则抛出 IllegalArgumentException 异常
 */
public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}

如果指定长度等于 0,则使用一个共享的空数组 EMPTY_ELEMENTDATA
这是一个优化,避免为零容量的列表分配新的内存

/**
 * 用于空实例的共享空数组实例
 */
private static final Object[] EMPTY_ELEMENTDATA = {};

6.扩容机制

当数据达到 ArrayList 容量(capacity),会触发 ArrayList 自动扩容

  1. 首先创建一个新的数组,这个数组的长度是原来数组的 1.5 倍
  2. 使用 ArrayList.copyOf() 方法,把原来数组的数据拷贝到新的数组

当扩容完成以后,会当前要存储的数据,存到新的数组里面

7.注意事项

  • 由于扩容机制涉及到数组的复制操作,所以在频繁增加大量元素时,性能可能会受到影响
  • ArrayList 是线程不安全的

8.总结

ArrayList 是一种灵活且常用的数据结构,适用于需要动态调整大小并频繁进行随机访问操作的场景

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值