java中ArrayList类的操作

本文对比了ArrayList与Vector两种集合类的特性与应用场景。ArrayList在性能上优于Vector,但不具备线程安全性;Vector的所有方法都实现了同步,适合多线程环境。文章还介绍了如何通过Collections.synchronizedList将ArrayList转换为线程安全的集合。

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

ArrayList类是Java集合框架出现之后用来取代Vector类的:

二者底层原理都是基于数组的算法,一模一样.

区别:
Vector: 所有的方法都使用了synchronized修饰符. 线程安全但是性能较低. 适用于多线程环境.
ArrayList:所有的方法都没有使用synchronized修饰符. 线程不安全但是性能较高.
即使以后在多线程环境下,我们也不使用Vector类:

ArrayList list = Collections.synchronizedList(new ArrayList(…));

常用方法参照与Vector类.

阅读源代码发现,Vector和ArrayList的源代码差异有点大(从设计上考虑).
有的时候某个方法需要返回一个ArrayList对象:
但是在该方法中,如果一个都没有查询到,我们不会返回null,我们会返回一个空集对象(没有元素的集合).
public ArrayList getAll()
{
//TODO
//return Collections.emptyList();//最好的方式.
return new ArrayList();//但是很多人最直观,最简单选用的方式
}
在Java7之前,即使使用new ArrayList创建对象,一个元素都不存储,但是在堆空间依然初始化了长度位10的Object数组,没必要.
从Java7开始优化这个设计,new ArrayList,其实底层创建的使用一个空数组.
Object [] elementData = new Object[]{};
在第一次调用add方法的时候,才会重新去初始化数组.
这里写图片描述
ArrayList底层实现方法这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值