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

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

 

java基础之ArrayList和Vector的主要区别;

List接口下一共实现了三个类:ArrayList,Vector,LinkedList。 LinkedList主要保持数据的插入顺序的时候使用,采用链表结构。ArrayList,Vector主要区别...
  • ldxlz224
  • ldxlz224
  • 2016年09月18日 15:19
  • 1532

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

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

ArrayList和Vector区别以及其扩容机制

ArrayList和Vector区别以及其扩容机制 相同点:   1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口     (extends AbstractList im...
  • dietime1943
  • dietime1943
  • 2017年01月09日 15:40
  • 836

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

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

Vector,ArrayList,LinkedList 的区别是什么?

简要概括: 1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。 2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允...
  • xuanjiewu
  • xuanjiewu
  • 2016年01月26日 10:21
  • 979

ArrayList 和 LinkedList 和Vector使用上有什么区别?实现上有什么区别?

ArrayList 和 Vector 使用上有什么区别?实现上有什么区别?Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。 ...
  • u012373815
  • u012373815
  • 2015年11月30日 10:19
  • 1271

ArrayList和Vector的扩容机制

ArrayList中ensureCapacity扩容,trimToSize容量调整到适中,Vector的扩容,是可以指定扩容因子,同时Vector扩容策略是:原来容量的2倍与原来容量+扩容因子,两者中...
  • seapeak007
  • seapeak007
  • 2016年11月28日 17:31
  • 1765

关于ArrayList和Vector空间利用率的一点探索

看到一篇java方面的文章其中提到ArrayList和Vector俩容器,文章作者提到Vector的空间利用率比ArrayList要大,最有意思的是他说Vector的空间利用率能达到100%。看到这里...
  • Javanjg
  • Javanjg
  • 2016年11月03日 21:35
  • 674

java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较

一、list简介List列表类,顺序存储任何对象(顺序不变),可重复。 List是继承于Collection的接口,不能实例化。实例化可以用: ArrayList(实现动态数组),查询快(随意...
  • longshenlmj
  • longshenlmj
  • 2015年06月04日 17:39
  • 4165

一道关于:ArrayList、Vector、LinkedList的存储性能和特性 的面试题

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢...
  • u014044812
  • u014044812
  • 2015年09月09日 22:46
  • 2129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Vector还是ArrayList这是个问题――比较Vector和ArrayList的不同
举报原因:
原因补充:

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