Vector和ArrayList的比较

参考这位大神的
http://www.cnblogs.com/muzongyan/articles/1782788.html
他的是2010年的文章,我2017年才看见!~~~

Vector和ArrayList—-哪一个更好,为什么?

要回答这个问题不能一概而论,有时候使用Vector比较好,有时候是ArrayList
有时候这两个都不是最好的选择 。需要看你用它干什么 。下面有4个要素:
| API
| 同步处理
| 数据增长性
| 使用模式

API
Vector类似于ArrayList,从API的角度来看这两个类非常相似,但还是有主要的区别的。
同步性
Vector是同步的。 这个类的中的一些方法保证了Vector中的对象是线程安全的。
而ArrayaList则是异步的,因此ArrayList中的对象并不是线程安全的。 因为同步的要求会影响执行效率,如果不需要线程安全的集合,那么ArrayList是一个很好的选择,可以避免同步带来的不必要的性能开销。
数据增长
从内部实现机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度,它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的控件总是比你实际需要的大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销 (ArrayList不能初始化指定的大小)。
使用模式
在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)避免了同步、额外的方法调用和不必要的重新分配空间的操作 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值