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

原创 2005年05月24日 17:57:00

 


要回答这个问题不能一概而论,有时候使用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建议使用一个简单的数矗ˋrray)来代替Vector

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

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

Vector 和 ArrayList 哪一个更好? 为什么?

Vector  和  ArrayList 比较 有时用Vector更好一点,有时用ArrayList更好一点,不能准确容易的给出答案,因为要视具体情况而定,有四个主要考虑的因素: 1:API 2...
  • topwqp
  • topwqp
  • 2013年03月28日 16:24
  • 1822

MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

Naresh Kumar是一位软件工程师与热情的博主,对编程与新事物充满了激情和兴趣。近日,Naresh撰写了一篇博 文,对开源世界最常见的两种数据库MySQL与PostgreSQL的特点进行了详尽...

E3闪光比Progskeet哪一个是更好地降级PS3的3.70到3.55固件

E3闪光比Progskeet哪一个是更好地降级PS3的3.70到3.55固件   什么是E3的闪光?   E3 FLASHER是短语最初的闪光专门为PS3。   什么ProgSkeet?   这Pro...
  • likug1
  • likug1
  • 2014年07月29日 12:36
  • 420

MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

摘要 InfoQ 上面的一个老帖子,说的比较客观。没有具体性能及资源测试结果,伸手党速退!在决定选用什么数据库之前,至少要先了解下各个产品的特点吧?说的就是这个。 在 InfoQ 上看...

移动APP vs. 移动网站,哪一个更好?

在移动应用程序中有一些功能,可以使app在某些场合非常实用。另一方面,在某些情况下你又可以看到移动网站略胜一筹。在本文有一些相关的见解,可以帮助你选择什么才是最适合你的。...

MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

Naresh Kumar是一位软件工程师与热情的博主,对编程与新事物充满了激情和兴趣。近日,Naresh撰写了一篇博文,对开源世界最常见的两种数据库MySQL与PostgreSQL的特点进行了详尽的分...

【Stackoverflow好问题】LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个呢?

问题 LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个呢? 精华回答 一言以蔽之,在大部分情况下,使用ArrayList会好一些。 一、耗时上各有优缺点。...

容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)

1.问题的提出 在没有了解vector之前,动态数组一般都是又new创建的。在了解vector后发现vector竟是那样方便好用,但方便的同时却是以牺牲执行效率为代价的。网上对vector和array...

ArrayList LinkedList Vector性能测试

  • 2015年05月03日 15:19
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Vector 还是ArrayList――哪一个更好,为什么?
举报原因:
原因补充:

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