Vector还是ArrayList这是个问题――比较Vector和ArrayList的不同

原创 2004年07月26日 21:22:00

Vector 还是ArrayList――哪一个更好,为什么?


要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是

最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑

的因素:

l API

l 同步处理

l 数据增长性

l 使用模式

下面针对这4个方面进行一一探讨

API 

在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这

样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相[b]似。但他们之间也还

是有一些主要的区别的。

同步性

Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步

的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不

需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的

性能开销。

数据增长

从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类

型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,

Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集

合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一

些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

使用模式

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一

个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除

元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元

素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素

都要执行位移的操作。这一切意味着什么呢?

这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或

ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加

或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的使用缺比较慢

-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建

iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开

销。

最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector

或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外

的方法调用和不必要的重新分配空间的操作。

 

使用ASP常见问题解答

(作者:林子 2000年06月07日 14:12)  问题:如何保护自己的ASP源代码不泄露?   答:下载微软的Windows Script Encoder,对ASP的脚本和客户端JavaScrip...
  • ghj1976
  • ghj1976
  • 2000-08-31 10:00:00
  • 1250

比较ArrayList、LinkedList、Vector

LinkedList的add和remove性能比ArrayList高,你确定?
  • renfufei
  • renfufei
  • 2013-12-02 18:11:37
  • 44037

List以及arrayList,linkedlist,vector,以及stack的区别

List以及arrayList,linkedlist,vector,以及stack的区别 首先List是接口,而后面四个是它的实现类 1.arrayList是一个数组,查询效率快,但是插入删除...
  • bj262948
  • bj262948
  • 2017-07-13 09:46:44
  • 214

Vector和ArrayList的比较

今天研究了一下Vector和ArrayList的源码,又加深了对这两个类的理解。 List接口下一共实现了三个类:ArrayList,Vector,LinkedList。LinkedList就不多说了...
  • tayanxunhua
  • tayanxunhua
  • 2013-08-18 00:06:55
  • 22442

Vector,ArrayList,LinkedList的区别与适用场景

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。...
  • bestxiaok
  • bestxiaok
  • 2017-08-31 08:52:14
  • 1290

Vector还是ArrayList这是个问题 ――比较Vector和ArrayList的不同

Vector还是ArrayList这是个问题 2003年12月16日  作者:yahoo163  Matrix-与Java共舞     译者语:那天一个好...
  • GumPGZ
  • GumPGZ
  • 2004-06-25 09:23:00
  • 797

【集合】ArrayList和Vector的比较总结

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素, 能够维护元素的次序,并且允许元素的重复。...
  • qq_25943493
  • qq_25943493
  • 2015-02-15 23:03:10
  • 1377

Vector,ArrayList,LinkedList的异同

一.概况 三者都来自于List,其中vector,ArrayList底层实现是数组,而LinkedList的底层实现是单链表。 三者有如下特点: 1.Vector,ArrayList查找快,增删...
  • gongxiaoou
  • gongxiaoou
  • 2017-02-08 16:35:52
  • 248

Java 中Vector、ArrayList和LinkedList 的区别

Java 中Vector、ArrayList和LinkedList 的区别Java 中Vector、ArrayList和LinkedList 的区别 SDK提供了有序集合接口java.util.Lis...
  • daryl715
  • daryl715
  • 2007-02-25 09:49:00
  • 6002

比较Vector和ArrayList的不同

Vector 还是ArrayList――哪一个更好,为什么?要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯...
  • MyObject
  • MyObject
  • 2005-01-13 11:42:00
  • 1866
收藏助手
不良信息举报
您举报文章:Vector还是ArrayList这是个问题――比较Vector和ArrayList的不同
举报原因:
原因补充:

(最多只允许输入30个字)