欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java Vector与ArrayList的区别

发布时间:2025/4/16 java 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java Vector与ArrayList的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
俗话说最危险的地方最安全,写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的以下区别:
  • ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍
  • Vector提供indexOf(obj, start)接口,ArrayList没有

  • 另外Vector本来不是Java Collection Framework里的成员,在JDK 1.2的时候为了实现List再把它弄到里面去的,有点外来人的感觉。

    看来原来很多地方都不应该用Vector,应该用ArrayList。因为大部分情况下都不需要用到Vector的同步机制,即使真正在进行同步的地方,用Vector的同步通常也还是不能满足用户需求的。

    总结

    以上是生活随笔为你收集整理的Java Vector与ArrayList的区别的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。