当我们不需要同步时,ArrayList比Vector更快。而当我们需要一个同步的集合时,最好使用同步包装器(如果我说错了,请纠正我),或者仅在对该集合进行调用时才同步代码。是否存在使用Vector的最佳选择情况?
尽管在新代码中使用 Vector
很少是个好主意,但没有迫切需要弃用。虽然新的集合类更优秀,但使用 Vector
类并不会导致任何问题。
此外,有一些其他标准的Java API依赖于Vector
API,并且无疑有成千上万的客户和第三方应用程序也在使用它。
基本上,弃用Vector
将造成不必要的破坏。如果代码可靠工作,即使慢一点,也没有必要强制人们更改它。
有人提出/暗示他们可以将Vector
弃用而不(永远)删除它。但问题是:弃用警告会给真正的人员带来实际的工作。如果这样做是不必要的,那么忙碌的人们将默认屏蔽警告。(回想一下“狼来了”的故事....)
因为有很多程序使用Vector。从jre中删除Vector意味着它们都将无法正常工作。另一方面,根据您的需要使用ArrayList或其他捆绑的List实现之一。
在Java中检查锁消除,现代JVM实现(Mustang)足够智能,可以优化共享和非共享对象的访问。 Mustang中的同步优化
因此,这并不重要(使用带有同步关键字的向量/数组列表); 但是弃用会导致编译时出现太多警告:(
StringBuilder
类作为非同步替代StringBuffer
(以避免由于不必要的锁定而导致的性能损失)。然而,现在HotSpot可以优化掉StringBuffer
的同步(如果被认为是不必要的),从而使其速度与StringBuilder
相匹配。我想知道Vector
是否也从这样的优化中受益... - Adam Paynter