注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风轻扬

活着就是为了追求幸福

 
 
 

日志

 
 
关于我

关注互联网应用架构、分布式与海量数据处理技术、云计算、数据库技术

网易考拉推荐

Java Vector与ArrayList的区别  

2008-01-18 21:15:09|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
俗话说最危险的地方最安全,写Java代码的时候Vector估计是最常用的集合类了,ArrayList用得也不少。不过关于这两个类有什么区别竟然从来就没去关注过,直到今天才偶然发现这两个类其实有重大区别,即Vector的所有方法都加了synchronized,而ArrayList没有加。

这一点区别可不小,虽然Java对synchronized是优化再优化,再比起不加synchronized的总是慢一些。马上做了个简单测试,写程序各自调用Vector.get()和ArrayList.get()1亿次,分别在我Linux本本上的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的同步通常也还是不能满足用户需求的。

  评论这张
 
阅读(2524)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017