设为首页
加入收藏
联系我们
首页 基础教程 技术文档 实例分析 数 据 库 疑难杂症 ASP.NET 七夕许愿树 技术论坛
同学网,基于同学关系的真实社区
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
最新文章
 C#摄像头编程实例
 C#下用P2P技术实现点…
 Asp.net(c#)数…
 SQL Server数据…
 .NET牛人应该知道些什…
 NET牛人应该知道些什么
 SQL Server S…
 备份指定表到另一数据库
 SQLSERVER中快速…
 ASP.NET中url传…
 ASP.NET自动给UR…
 ASP.NET 2.0防…
 ASP.NET 2.0 …
 如何解决ASP.net中…
 sql server 与…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
推荐文章
 关于C#中的REF和黓认…
 读书笔记c#高级编程 委…
 【算法】C#快速排序类
 Visual C#的SQ…
 C#中调用API
 Infragistics…
 C#接口转换
 C#读取设备信息
 用.net操作word
 C# MessageBo…
 Visual C#中的数…
 雅虎公司C#笔试题,看看…
 C#.NET使用NHib…
 .net学习之运算符重载…
 Visual C# 3.…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
热门文章
 ADO.Net与ADO在…
 开发ASP.NET下的M…
 用C#+XMI技术进行U…
 什么是虚拟机?
 C#基础全接触
 C#学习第一天
 雅虎公司C#笔试题,看看…
 C#语言初级入门(1)
 C#中利用正则表达式实现…
 远程重启计算机(C#)
 用.net操作word
 什么是B/S三层?
 VB和C# 语法对比图 …
 Visual C#常用函…
 Visual C#的SQ…
Vector 还是ArrayList――哪一个更好
阅读正文 文字大小:增大 减小  文字行距:增大 减小   双击自动滚屏
本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│  └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

要回答这个问题不能一概而论,有时候使用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 )避免了同步、额外

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


本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

中国C#技术交流QQ群:6337034  10976424  9383681  35248582  35248645
版权所有:中国C#技术学习中心 Copyright ? 2006-2008
建议浏览分辨率使用:1024*768分辨率
粤ICP备05002251号