ArrayList与Vector的区别

转载 2012年03月25日 12:02:52
有的时候 Vector更好一些;有的时候ArrayList 更好一些;有的时候你一个也不想用。但愿,你不是在期望一个简单明了的答案,因为答案因你在用他们做什么而定。下面是要考虑的四个方面:
  
  API
  
  同步-Synchronization
  
  数据增长-Data growth
  
  使用方法-Usage patterns
  
  让我一个一个来解释吧。
  
  API
  
  在The Java Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James Gosling, 和 David Holmes 是这样描述Vector的,它是更ArrayList类似的一个东西,所以从API的观点来看,它们俩是很相似的。但是,它们之间还是有些微的差别的。
  
  Synchronization
  
  Vectors是可同步化的,意思就是说,任何操作Vector的内容的方法都是线程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是线程安全的。如果你知道了这些的话,你就会发现,Vector的同步会让它在性能发方面有一些小问题。所以,如果你不需要线程安全的话,那么就使用ArrayList吧。为什么要为没有必要的同步付出代价呢?
  
  Data growth
  
  实际上,不管是ArrayList还是Vector,在它们内部都是使用一个Array来保存数据的。编程过程中,在使用它们任何一个的时候,你都需要记住这一点。你在往一个ArrayList或者Vector里插入一个元素的时候,如果内部数组空间不够了,这个对象(译者按:指的是你使用的ArrayList或者Vector)就要扩展它的大小。Vector在默认情况下是产生一个双倍大小,而ArrayList增加50%的大小。只要你合理的使用这些类,你就可以结束你在增加新的元素的时候所付出的性能代价。把对象(译者按:指的是你使用的ArrayList或者Vector)的初始化容量指定为你编程过程中所能用到的最大的容量总是最好的办法。仔细的指定容量,你可以避免以后改变内部Array容量,所要付出的代价。如果你并不知道到底有多少个数据,当是你知道数据的增长率,Vector确实有一点点优势,因为你可以指定增加值(译者按,如果没有猜错的话,作者说的方法应该是setSize(int newSize) Sets the size of this vector.)。
  
  Usage patterns
  
  ArrayList和Vector在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(O(1))内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时,差不多需要的时间为O(n-i),这里的n代表元素个数,i代表要增加和删除的元素所在的位置。这些操作需花费更多的时间,因为你需要挨个移动i和更高位置的元素。那么,以上这些到底说明了什么呢?
  
  这意味着,如果你取得一个元素,或者从数组末尾增加或删除一个元素的话,随便你使用Vector和ArrayList。如果你想要对数组内容做其他操作的话,那么就为自己好另一个容器吧。比喻说,LinkedList可以在常数级时间(O(1))内为任意一个位置的元素增加和删除。但是,取得一个元素,会稍微慢一点,时间要用O(i) ,这个i是元素的位置。通过ArrayList也是很简单的,因为你可以简单使用一个索引,而不是构造一个iterator 。LinkedList也为每个插入的元素建立一个内部对象。所以,你也必须知道,同时产生了垃圾对象。
  
  最后,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的“实践41“建议你使用一个普通的原始的数组来代替Vector和ArrayListe,特别是对效率优先的代码来说。通过使用数组(array),你可以避免同步,额外的方法调用,非理想化的大小改变。你付出的只是额外的开发时间。

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

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

Vector和ArrayList的比较

今天研究了一下Vector和ArrayList的源码,又加深了对这两个类的理解。 List接口下一共实现了三个类:ArrayList,Vector,LinkedList。LinkedList就不多说了...
  • tayanxunhua
  • tayanxunhua
  • 2013年08月18日 00:06
  • 21690

Vector,ArrayList,LinkedList的特点和区别

1.Vector简介及特点 1、Vector是内部是以动态数组的形式来存储数据的。 2、Vector具有数组所具有的特性、通过索引支持随机访问、所以通过随机访问Vector中的元素效率非常高、但是执...
  • m0_38110132
  • m0_38110132
  • 2017年07月11日 15:37
  • 355

Java 中Vector、ArrayList和LinkedList 的区别

Java 中Vector、ArrayList和LinkedList 的区别Java 中Vector、ArrayList和LinkedList 的区别 SDK提供了有序集合接口java.util.Lis...
  • daryl715
  • daryl715
  • 2007年02月25日 09:49
  • 3713

Vector,ArrayList,LinkedList的区别与适用场景

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。...
  • bestxiaok
  • bestxiaok
  • 2017年08月31日 08:52
  • 213

Vector与ArrayList与CopyOnWriteArrayList区别

1. Vector & ArrayList 1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步...
  • sxfda
  • sxfda
  • 2015年11月25日 17:30
  • 2149

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

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

ArrayList,LinkedList,Vector,Stack之间的区别

从多个方面讨论它们之间的区别: 1,线程安全性 2,实现方式 3,容量扩展方面 4,效率方面...
  • a19881029
  • a19881029
  • 2015年05月06日 17:47
  • 5784

比较ArrayList、LinkedList、Vector

LinkedList的add和remove性能比ArrayList高,你确定?
  • renfufei
  • renfufei
  • 2013年12月02日 18:11
  • 42068

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

简述ArrayList、Vector与LinkedList的异同点  Collection类的继承图如下:   从图中可以看出,LinkedList与ArrayList、ArrayDeque这三者都...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2016年10月08日 20:27
  • 43939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArrayList与Vector的区别
举报原因:
原因补充:

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