e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> JAVA教程 >> Vector 还是ArrayList——哪一个更好,为什么? >> 教程正文
 
教程搜索
 
 
相关教程
  • Jboss下MS SQL Server配置指导
  • 在win2000下的安装 JSP
  • 玩转Java的CLASSPATH
  • JSWDK环境安装与配置
  • 在Windows/NT上建立JSP环境
  • Resin+Apache的安装运行jsp/servlet
  • Tomcat4.01全攻略
  • Linux环境下安装运行JSP/servlet
  • JDB 的简单使用
  • JDK安装
  • win2000server install j2ee
  • JBuilder 6 :Borland方式的Java集成开
  • JAVA一步一步的WEB编程关于JSP与JavaB
  • 在FreeBSD4.X上安装JDK1.3.1
  • 安装配置篇Apache+Tomcat
  • Win2000下Tomcat4.1.12+Apache2.0.43的
 
 

图文教程


  • 将其他Email邮件转移到Gmail邮箱中

  • Vista破解TCP/IP后进不了系统咋办

  • Vista下用DriveSpacio查看磁盘空间

  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”
 
 
赞 助 商
 
 
Vector 还是ArrayList——哪一个更好,为什么?
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

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

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

的因素:

l API

l 同步处理

l 数据增长性

l 使用模式

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

API

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

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

是有一些主要的区别的。

同步性

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)避免了同步、额外

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

  • 上一篇教程: 如何才算掌握Java(J2SE篇)
  • 下一篇教程: JAVA运行环境和J2EE运行环境的搭建
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.