在java中何时使用向量而不是数组更好?为什么?
答案 0 :(得分:7)
Vector
:永远不会,除非API需要它,因为它是一个类,而不是一个接口。
List
:这应该是您默认的类似数组的集合。它是一个接口,因此如果需要,任何东西都可以是List
。 (并且有很多List
实现,例如ArrayList
,LinkedList
,CopyOnWriteArrayList
,ImmutableList
,用于各种功能集)
Vector
是线程安全的,但Collections.synchronizedList()
包装器也是如此。
数组:很少,如果API需要。数组的另一个主要优点是当你需要一个固定长度的基元数组时,与List<Integer>
相比,所需的内存空间相当紧凑,其中整数需要被加入Integer
个对象
答案 1 :(得分:2)
Vector
(或List
)当您事先不知道要插入多少元素时。
当您完全知道该向量的整个生命周期中元素的最大数量时,array
。
由于在使用List
或Vector
(任何集合)时没有高性能处罚,我总是会选择使用它们。他们的灵活性太重要了,不予考虑。
现在我只在必要时使用arrays
。示例:使用需要它们的API时。
答案 2 :(得分:0)
首先关闭ArrayList是一个比Vector更快的实现(但不是线程安全的)。
当您事先知道长度并且不会发生太大变化(或根本不变)时,阵列很方便。
答案 3 :(得分:0)
声明方法时,请使用List
。
不要使用Vector
,它是JDK的早期版本,并且已经过改进以与Collections
一起使用。
如果存在对性能非常敏感的算法,则私有阵列成员可能会有所帮助。如果需要返回其内容或将它们传递给方法,通常最好围绕它构造一个对象,可能就像Arrays.asList(thePrivateArray)
一样简单。对于线程安全列表:Collections.synchronizedList(Arrays.asList(thePrivateArray))
。为了防止修改数组内容,我通常使用Collections.unmodifiableList(Arrays.asList(thePrivateArray))
。