Java集合框架 - ArrayList的底层实现原理

ArrayList是Java集合框架中的动态数组,适用于存储对象并进行快速查询。文章详细介绍了ArrayList的特点,如线程不安全、支持按索引访问、动态扩容,并解析了添加、删除、扩容的底层实现。此外,对比了ArrayList与数组、Vector的区别,建议在预估容量后初始化ArrayList以避免频繁扩容带来的性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ArrayList是什么?

ArrayList是java集合框架的一部分,用于存储多个对象的工具类.

1.特点:

  1. 对象按照插入的顺序存储.
  2. 同一个对象可以被重复插入,包括Null值.
  3. 支持根据下标随机快速访问,查询效率高,时间复杂度为:O(1).
  4. 容量不够时,会自动扩容.
  5. 删除跟插入元素时会涉及到数据的前移跟后移,效率不高,时间复杂度为:O(n).
  6. 只能存储引用数据类型.
  7. 线程不安全.

2.核心属性:

  1. Object[] elementData:用于实际存储数据的数组,默认初始容量10,当容量不够时,每次扩容0.5倍,即:新容量= 旧容量 + ( 旧容量>>1 );最小存储容量: 0(创建对象时,指定容量为0)最大存储容量: Integer.MAX_VALUE 即:2的31次方 - 1。
  2. int size:记录当前数组中存储数据的个数。
  3. int modCount:记录此列表在结构上被修改的次数,在Iterator(迭代器)中修改列表结构(新增,删除)时,会抛出:ConcurrentModificationException 异常;如果要在循环中删除某个元素,只能通过for循环来删除。

二、使用场景&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值