- ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍
- Vector提供indexOf(obj, start)接口,ArrayList没有
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的以下区别: