关闭

[知识学习] ArrayList和Vector的区别

标签: arraylistVectorjava
847人阅读 评论(1) 收藏 举报
分类:
今天同学突然问到ArrayList和Vector的区别,心里一片茫然。。。。所以尽快查了一下,记录下来,加深记忆。

首先,ArrayList和Vector功能类似。Vector从Java 1.0起就存在,ArrayList从Java 1.2起才存在,较新。所以Vector在JavaME、Card等各种微小版本都可以使用,而ArrayList不能用。

1. 线程安全
Vector是同步的, 而ArrayList不是.
因为Vector是同步的, 所以它是线程安全的.
同样, 因为Vecotr是同步的, 所以他需要额外的开销来维持同步锁, 所以它要比ArrayList要慢.(理论上来说)。
当然也可用Collection.synchronizedList(List)来得到一个线程安全的List。

2. 容量增长
Vector和ArrayList都是动态数组。当数组容量不足时,都可以对数组进行扩容。Vector允许用户自己设置capacityIncrement,所以Vector在扩容时,会尝试按照预先设置的capacityIncrement作为增量来设置。而ArrayList则直接将容量扩大一倍。

举个例子,如果Vector和ArrayList当前容量都为1000,用户对Vector设置的capacityIncrement为200。当容量不够需要扩容时,Vector会首先增加200,扩容后容量为1200;而ArrayList容量则为2000.
如果capacityIncrement设为0或者负值, Vector就会做和ArrayList一样, 每次都将数组大小扩大一倍。

不过,据Jack Shirazi在OnJava上的一篇文章来看,两者在同步的问题上性能上差不多。
所以在一般情况下, 还是鼓励用ArrayList的, 如果你有同步控制的需要, 那就用Vector吧。省的再用Collection.synchronizedList(List)来转换一次,而且转换后代码的可读性也会不好。

参考http://blog.csdn.net/foart/article/details/4263387
初次写博,如有什么问题,请在下面直接回复。

0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:250650次
    • 积分:4707
    • 等级:
    • 排名:第6117名
    • 原创:209篇
    • 转载:111篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论