推荐给好友 上一篇 | 下一篇

vector与arraylist.txt比较


声明
  • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任; 2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
 Vector 还是ArrayList――哪一个更好,为什么? JAVA中文站社区门户 ["[8rG6LJ+S]8z9c%j

  要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:JAVA中文站社区门户 mZ|;x0_;H@g x1[F

gms$Q@k D  l API

/en"c$cU,N3h HM JAVA中文站社区门户g\1^xU e

  l 同步处理JAVA中文站社区门户g;T:|Yr_

JAVA中文站社区门户ai5F]"I;L,S u

  l 数据增长性JAVA中文站社区门户#bV1`?a*D+|qTp

4GxUaEg  l 使用模式JAVA中文站社区门户(_B{^#\+DF

:l|N5^p  下面针对这4个方面进行一一探讨JAVA中文站社区门户{#WXzc?

JAVA中文站社区门户 gcj:I6n%u#n4W

  API

6_ Ss:{}4a JAVA中文站社区门户{ sy`Y){

  在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。JAVA中文站社区门户R*w'~"w&cR4G!V[0z

JAVA中文站社区门户7C!n2g~a9D

  同步性JAVA中文站社区门户'z6U4C2|P

JAVA中文站社区门户2QU1Mp$cz/q6w }"J

  Vector 是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。

A N [.Z4G)Zw w9ajh%~9k!_ JAVA中文站社区门户Ut \0d P*Z!~}s

  数据增长

PR?.fy2|P2Jn JAVA中文站社区门户T2U"Q{U#f m X ig

  从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用 Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

D:E,]'}6p2LSn w JAVA中文站社区门户wD5@x|l;X0Hh x

  使用模式JAVA中文站社区门户w(a`J-l0v-Zk-_]

b9w1ux4q,Z;M*a  在ArrayList和 Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?

jEiV*\vzQ"B

(t^,J@8xA K;y  这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。JAVA中文站社区门户+z5Ee0b;G9C-Y`(xc

;NUsg }W_  最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组 (Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。JAVA中文站社区门户(f QVQ+kA



TAG: ArrayList txt Vector vector arraylist
 

评分:0

我来说两句

seccode