Board logo

标题: Vector 还是ArrayList――哪一个更好,为什么? [打印本页]

作者: qingqing3721    时间: 2011-11-6 19:25     标题: Vector 还是ArrayList――哪一个更好,为什么?

Vector 还是ArrayList――哪一个更好,为什么?要答复这个成绩不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望可以取得一个复杂肯定答案,由于这要看你用它们干什么。上面有4个要思索的要素:l  APIl  同步处置l  数据增长性l  使用形式上面针对这4个方面停止逐个讨论API 在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector相似于ArrayList.。所有从API的角度来看这两个类十分相似。但他们之间也还是有一些主要的区别的。同步性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)防止了同步、额外的方法调用和不用要的重新分配空间的操作。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0