当前位置:  开发笔记 > 编程语言 > 正文

如果线程安全性不是问题,则使用Java中的ArrayList与Vectors

如何解决《如果线程安全性不是问题,则使用Java中的ArrayList与Vectors》经验,为你挑选了4个好方法。

性能VectorArrayList?之间真的有那么大差异吗?当线程安全不成问题时,始终使用ArrayLists是一种好习惯吗?



1> Christian P...:

Vector源于预收集API时代,并且自从成为其中的一部分后进行了改造.从我所读到的,它不被弃用的原因是因为核心API依赖于它.

ArrayList是作为Collections API的一部分从头开始编写的,因此除非您需要支持低至1.2的Java版本,否则应该使用它.

如果需要线程安全的ArrayList,可以使用静态工厂方法Collections.synchronizedList(new ArrayList);生成列表.


是的,除非你的目标是J2ME/pre 1.2 J2SE,否则使用ArrayList.

2> Aaron..:

如果线程安全不是问题,ArrayList则更快,因为它不必同步.虽然,您应该始终将变量声明为,List以便稍后可以根据需要更改实现.

我更喜欢明确地处理我的同步,因为很多操作需要多次调用.例如:

if (!myList.isEmpty()) { 
    myList.get(0);
}

应该:

synchronized (myList) {
   if (!myList.isEmpty()) { 
       myList.get(0);
   }
}


依赖于synchnizedList包装是在这些多次调用情况下犯的常见错误,并且导致很难找到错误,因为您认为已经正确地完成了错误...

3> bruno conde..:

如果线程安全不是问题,则应始终使用ArrayList.向量具有同步的开销,并且已经表明之间的性能差异ArrayListVector是深不可测的.你可以谷歌搜索很多性能基准测试.

这是一个时间和性能.



4> James Schek..:

忽略同步,之间的主要区别VectorArrayListVector是一个可调整大小的阵列(类似于C++ STL向量),并ArrayList是恰好由阵列被备份列表.

差异在setSize()方法中体现出来.没有等效的方法ArrayList.一些前C++ Java开发人员对此持怀疑态度.有很多简单的方法可以解决它,所以它应该不是问题.

只是不要告诉C++开发人员一个ArrayList等同于a的错误std::vector.你永远不会听到它的结束.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有