服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

vector & arraylist 哪一个更好?为什么

vector 和 arraylist的不同 
有的时候 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在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(

扫描关注微信公众号