【问题标题】:When is it better to use a vector than an array and vice versa in java?什么时候在java中使用向量比使用数组更好,反之亦然?
【发布时间】:2011-05-07 22:06:21
【问题描述】:

在java中什么时候使用向量比使用数组更好,反之亦然?为什么?

【问题讨论】:

标签: java


【解决方案1】:

Vector: 永远不会,除非 API 需要它,因为它是一个类,而不是一个接口。

List: 这应该是你默认的类数组集合。这是一个接口,所以如果需要,任何东西都可以是List。 (并且有很多 List 实现,例如 ArrayListLinkedListCopyOnWriteArrayListImmutableList,用于各种功能集)

Vector 是线程安全的,但 Collections.synchronizedList() 包装器也是如此。

array:很少,如果 API 需要。数组的另一个主要优点是当您需要一个固定长度的基元数组时,所需的内存空间相当紧凑,而List<Integer> 需要将整数装箱到Integer 对象中。

【讨论】:

    【解决方案2】:

    Vector(或List)当您事先不知道要插入多少元素时。

    array,当您完全知道该向量的整个生命周期中元素的最大数量是多少时。

    由于在使用 ListVector(与此相关的任何集合)时没有高性能损失,我总是选择使用它们。它们的灵活性太重要了,不容忽视。

    现在我只在绝对需要时使用arrays。示例:使用需要它们的 API 时。

    【讨论】:

      【解决方案3】:

      首先,ArrayList 是比 Vector 更快的实现(但不是线程安全的)。

      如果您事先知道长度并且不会改变太多(或根本不会),数组会很方便。

      【讨论】:

        【解决方案4】:

        声明方法时,使用List

        不要使用 Vector,它是 JDK 的早期部分,经过改进后可以与 Collections 一起使用。

        如果存在对性能非常敏感的算法,私有数组成员可能会有所帮助。如果需要返回其内容或将它们传递给方法,通常最好围绕它构造一个对象,可能就像Arrays.asList(thePrivateArray) 一样简单。对于线程安全列表:Collections.synchronizedList(Arrays.asList(thePrivateArray))。为了防止修改数组内容,我一般使用Collections.unmodifiableList(Arrays.asList(thePrivateArray))

        【讨论】:

          猜你喜欢
          • 2021-12-10
          • 1970-01-01
          • 1970-01-01
          • 2020-08-19
          • 2011-04-01
          • 2010-11-14
          • 2011-12-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多