当我们不需要同步时,ArrayList比Vector更快。当我们确实需要同步集合时,我们最好使用同步包装器(如果我错了就纠正我),或者仅在对该集合进行调用时同步代码。是否存在使用Vector是最佳选择的情况?
答案 0 :(得分:17)
虽然在新代码中使用Vector
并不是一个好主意,但没有必要弃用。虽然新的集合类是优越的,但使用Vector
类实际上并没有破坏任何东西。
此外,有a number of other standard Java APIs依赖于Vector
API,毫无疑问,成千上万的客户和第三方应用程序也使用它。
基本上,弃用Vector
会造成不必要的破坏性。 不需要可以推动人们更改可靠的代码,如果速度稍慢的话。
有人建议/暗示他们可以弃用Vector
而不(实际上)删除它。但问题是,弃用警告会为真实的人创造真正的工作。如果不必要地执行此操作,则忙碌的人将默认开始抑制警告。 (回想起那个叫狼的男孩的故事......)
答案 1 :(得分:2)
据我所知,使用Vector仅用于拥有依赖于它的核心API或1.2之前的运行时环境。这也可能是一种安慰。有些人喜欢向量,因为这是他们最初使用的。
更新:现在已按照here
所述弃用了Vector答案 2 :(得分:1)
因为有很多程序使用Vector。从jre中删除Vector意味着它们都会被破坏。另一方面,根据您的需要使用ArrayList或其他捆绑的List实现之一。
答案 3 :(得分:0)
在java中检查Lock Elision,现代JVM实现(Mustang)足够智能,可以优化共享&非共享对象访问。 Synchronization optimizations in Mustang
所以,它并不重要(带有synchronized关键字的vector / arraylist);但是对于编译会导致过多的警告:(