【发布时间】:2011-05-07 22:06:21
【问题描述】:
在java中什么时候使用向量比使用数组更好,反之亦然?为什么?
【问题讨论】:
标签: java
在java中什么时候使用向量比使用数组更好,反之亦然?为什么?
【问题讨论】:
标签: java
Vector: 永远不会,除非 API 需要它,因为它是一个类,而不是一个接口。
List: 这应该是你默认的类数组集合。这是一个接口,所以如果需要,任何东西都可以是List。 (并且有很多 List 实现,例如 ArrayList、LinkedList、CopyOnWriteArrayList、ImmutableList,用于各种功能集)
Vector 是线程安全的,但 Collections.synchronizedList() 包装器也是如此。
array:很少,如果 API 需要。数组的另一个主要优点是当您需要一个固定长度的基元数组时,所需的内存空间相当紧凑,而List<Integer> 需要将整数装箱到Integer 对象中。
【讨论】:
Vector(或List)当您事先不知道要插入多少元素时。
array,当您完全知道该向量的整个生命周期中元素的最大数量是多少时。
由于在使用 List 或 Vector(与此相关的任何集合)时没有高性能损失,我总是选择使用它们。它们的灵活性太重要了,不容忽视。
现在我只在绝对需要时使用arrays。示例:使用需要它们的 API 时。
【讨论】:
首先,ArrayList 是比 Vector 更快的实现(但不是线程安全的)。
如果您事先知道长度并且不会改变太多(或根本不会),数组会很方便。
【讨论】:
声明方法时,使用List。
不要使用 Vector,它是 JDK 的早期部分,经过改进后可以与 Collections 一起使用。
如果存在对性能非常敏感的算法,私有数组成员可能会有所帮助。如果需要返回其内容或将它们传递给方法,通常最好围绕它构造一个对象,可能就像Arrays.asList(thePrivateArray) 一样简单。对于线程安全列表:Collections.synchronizedList(Arrays.asList(thePrivateArray))。为了防止修改数组内容,我一般使用Collections.unmodifiableList(Arrays.asList(thePrivateArray))。
【讨论】: