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

原创 2004年06月25日 09:23:00
Vector还是ArrayList这是个问题
2003年12月16日  作者:yahoo163  Matrix-与Java共舞    
译者语:那天一个好朋友问我Vector和ArrayList到底有什么区别用那个好,自己也不是很清楚,于是乎搬出书看了个够但是书里也没有专门对此进行比较,呵呵,索性黄天不负有心人,终于被我找到了问题的答案,这里我把它翻译过来,希望对大家有所帮助。有什么翻译的不对的地方还望指正:)
原文:url.gifhttp://www.javaworld.com/javaworld/javaqa/2001-06/03-qa-0622-vector.html? 
 
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)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

Java ArrayList、LinkedList和Vector的使用及性能分析

第1部分 List概括 List 是一个接口,它继承于Collection的接口。它代表着有序的队列。 AbstractList 是一个抽象类,它继承于AbstractCollection。A...
  • guoweimelon
  • guoweimelon
  • 2016年03月04日 11:01
  • 1607

Java进阶(四十六)简述ArrayList、Vector与LinkedList的异同点

简述ArrayList、Vector与LinkedList的异同点  Collection类的继承图如下:   从图中可以看出,LinkedList与ArrayList、ArrayDeque这三者都...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2016年10月08日 20:27
  • 43805

ArrayList和Vector的区别,HashMap和Hashtable的区别以及线程安全的理解

就ArrayList与Vector主要从二方面来说.  一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的  二.数据增长:当需要增长...
  • heirenheiren
  • heirenheiren
  • 2014年12月21日 23:23
  • 1507

比较分析Vector、ArrayList和hashtable hashmap数据结构

  • 2008年09月01日 22:56
  • 235KB
  • 下载

比较Vector、ArrayList和hashtable hashmap

  • 2009年01月07日 15:10
  • 35KB
  • 下载

ArrayList LinkList和vector的区别

  • 2014年06月18日 14:38
  • 23KB
  • 下载

Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.

  • 2013年04月23日 10:50
  • 28KB
  • 下载

ArrayList LinkedList Vector性能测试

  • 2015年05月03日 15:19
  • 3KB
  • 下载

面试知识点--Vector和ArrayList的比较

Vector和ArrayList也是面试过程经常提问到的java基础知识,但是我们很多人容易忽略它们,这里总结一下他们的相同和不同,希望能提高和丰富一下我们的基础知识。Vector和ArrayList...
  • dajian790626
  • dajian790626
  • 2017年12月02日 15:16
  • 34

Java基础之ArrayList、LinkedList、Vector比较之代码示例

面试者之所以经常拿这三者来比较,是因为这三者都实现了List接口,他们的使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。 其实还有一种类型也要需要来比较的,那就St...
  • xz_src
  • xz_src
  • 2017年06月20日 07:45
  • 811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Vector还是ArrayList这是个问题 ――比较Vector和ArrayList的不同
举报原因:
原因补充:

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