ArrayList和Vector的比较

http://www.cnblogs.com/muzongyan/articles/1782788.html html


同步性数组

Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步 安全

的,所以ArrayList中的对象并非线程安全的。由于同步的要求会影响执行的效率,因此若是你不 异步

须要线程安全的集合那么使用ArrayList是一个很好的选择,这样能够避免因为同步带来的没必要要的 ide

性能开销。 性能

数据增加线程

从内部实现机制来说ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类 htm

型中增长元素的时候,若是元素的数目超出了内部数组目前的长度它们都须要扩展内部数组的长度, 对象

Vector缺省状况下自动增加原来一倍的数组长度,ArrayList是原来的50%,因此最后你得到的这个集 blog

合所占的空间老是比你实际须要的要大。因此若是你要在集合中保存大量的数据那么使用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)避免了同步、额外

的方法调用和没必要要的从新分配空间的操做。

相关文章
相关标签/搜索