性能Vector
和ArrayList
?之间真的有那么大差异吗?当线程安全不成问题时,始终使用ArrayLists是一种好习惯吗?
Vector源于预收集API时代,并且自从成为其中的一部分后进行了改造.从我所读到的,它不被弃用的原因是因为核心API依赖于它.
ArrayList是作为Collections API的一部分从头开始编写的,因此除非您需要支持低至1.2的Java版本,否则应该使用它.
如果需要线程安全的ArrayList,可以使用静态工厂方法Collections.synchronizedList(new ArrayList
生成列表.
如果线程安全不是问题,ArrayList
则更快,因为它不必同步.虽然,您应该始终将变量声明为,List
以便稍后可以根据需要更改实现.
我更喜欢明确地处理我的同步,因为很多操作需要多次调用.例如:
if (!myList.isEmpty()) { myList.get(0); }
应该:
synchronized (myList) { if (!myList.isEmpty()) { myList.get(0); } }
如果线程安全不是问题,则应始终使用ArrayList
.向量具有同步的开销,并且已经表明之间的性能差异ArrayList
和Vector
是深不可测的.你可以谷歌搜索很多性能基准测试.
这是一个时间和性能.
忽略同步,之间的主要区别Vector
和ArrayList
是Vector
是一个可调整大小的阵列(类似于C++ STL向量),并ArrayList
是恰好由阵列被备份列表.
差异在setSize()方法中体现出来.没有等效的方法ArrayList
.一些前C++ Java开发人员对此持怀疑态度.有很多简单的方法可以解决它,所以它应该不是问题.
只是不要告诉C++开发人员一个ArrayList
等同于a的错误std::vector
.你永远不会听到它的结束.