2.1 ArrayList的底层实现、扩容过程、add过程、Fail-Fast机制

ArrayList是一个线程不安全的动态数组,多线程环境下需要通过同步关键字或Collections.synchronizedList保证安全。其扩容策略是原来的1.5倍,添加元素包括增加长度和插入元素两步。此外,ArrayList拥有fail-fast机制,当集合被并发修改时会抛出ConcurrentModificationException异常。
摘要由CSDN通过智能技术生成

ArrayList的底层数据结构是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。

ArrayList的线程安全性:ArrayList在多线程环境下是线程不安全的,ArrayList添加元素分为两步,第一步先在object[size]的位置上存放需要添加的元素,第二步将size的值增加1。由于这个过程在多线程的环境下是不能保证具有原子性的,因此ArrayList在多线程的环境下是线程不安全的。
如果要在多线程环境下使用ArrayList,就要保证它的线程安全性,通常有两种解决办法:第一,使用synchronized关键字;第二,可以用Collections类中的静态方法synchronizedList();对ArrayList进行调用即可。
ArrayList继承AbstractList抽象父类,实现了List接口(规定了List的操作规范)、RandomAccess(可随机访问)、Cloneable(可拷贝)、Serializable(可序列化)。
ArrayList的主要成员变量
private static final int DEFAULT_CAPACITY = 10;
当ArrayList的构造方法中没有显示指出ArrayList的数组长度时,类内部使用默认缺省时对象数组的容量大小,为10。

ArrayList的构造方法
无参构造方法
int类型参数构造方法
Collection<? extends E>类型构造方法

ArrayList的方法
set(int index,E element)、indexOf(Object o)、get(int index)、remove(int index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值