JAVA中ArrayList等的扩容机制

本文对比分析了CopyOnWriteArrayList、ArrayList和Vector三种集合类的特性,包括它们的初始容量、扩容机制及适用场景。CopyOnWriteArrayList适合读多写少的场景,通过复制写入策略保证线程安全;ArrayList和Vector则在扩容策略上有区别,分别采用1.5倍和2倍或固定增量的方式。

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

第二部分:

CopyOnWriteArrayList<String> coarray=new CopyOnWriteArrayList<>();
ArrayList<String> array=new ArrayList<>();
Vector<String> vec=new Vector<>();

1:CopyOnWriteArrayList

CopyOnWriteArrayList在做修改操作时,每次都是重新创建一个新的数组,在新数组上操作,最终再将新数组替换掉原数组 
。因此,在做修改操作时,仍可以做读取操作,读取直接操作的原数组。读和写操作的对象都不同,因此读操作和写操作互 
不干扰。只有写与写之间需要进行同步等待。另外,原数组被声明为volatile,这就保证了,一旦数组发生变化,则结果对 
其它线程(读线程和其它写线程)是可见的。

CopyOnWriteArrayList并不像ArrayList一样指定默认的初始容量。它也没有自动扩容的机制,而是添加几个元素,长度就相 
应的增长多少。

CopyOnWriteArrayList适用于读多写少,既然是写的情况少,则不需要频繁扩容。并且修改操作每次在生成新的数组时就指 
定了新的容量,也就相当于扩容了,所以不需要额外的机制来实现扩容。

2:ArrayList

(1)、初始容量定义:10。

(2)、扩容:oldCapacity + (oldCapacity >> 1),即原集合长度的1.5倍。

3:Vector

(1)、初始容量定义:10。

(2)、扩容:当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则新数组长度为原数组长度的2倍。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值