Java Vector与ArrayList的区别

Java Vector与ArrayList的区别
 
俗话说最危险的地方最安全,写Java代码的时候Vector估计是最常用的集合类了,ArrayList用得也不少。不过关于这两个类有什么区别竟然从来就没去关注过,直到今天才偶然发现这两个类其实有重大区别,即Vector的所有方法都加了synchronized,而ArrayList没有加。 这一点区别可不小,虽然Java对synchronized是优化再优化,再比起不加synchronized的总是慢一些。马上做了个简单测试,写程序各自调用Vector.get()和ArrayList.get()1亿次,分别在我本本上的Sun JVM 5.0和6.0上跑,结果如下:                           JDK 5.0        JDK 6.0 Vector.get()        1861            1506 ArrayList.get()     1268            1073 其中单位都是毫秒。由此可见无论是JDK 6还是5中,使用synchronized的Vector的性能都比ArrayList差了50%。顺便也可以看出JDK 6相对于JDK 5性能有明显提升,不知道是不是JDK 6中用的Linear scan register allocation的功效,其中使用synchronized时的性能提升更明显(一个是提高15%,一个是提高20%),估计是JDK 6里的Biased locking的结果。 顺便再看了一下Vector和ArrayList的实现(在Eclipse里看JDK代码太方便了,赞一下),还发现Vector与ArrayList的以下区别:
  1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍
  2. Vector提供indexOf(obj, start)接口,ArrayList没有
另外Vector本来不是Java Collection Framework里的成员,在JDK 1.2的时候为了实现List再把它弄到里面去的,有点外来人的感觉。 看来原来很多地方都不应该用Vector,应该用ArrayList。因为大部分情况下都不需要用到Vector的同步机制,即使真正在进行同步的地方,用Vector的同步通常也还是不能满足用户需求的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值