Java中Vector类的对象是否为静态大小?

时间:2019-02-02 09:58:13

标签: java vector

我正在寻找这个问题的答案。 我从谷歌那里得到的东西 Java中的Java.util.Vector类。 Vector类实现可增长的对象数组。向量基本上属于旧类,但现在与集合完全兼容。它们与ArrayList非常相似,但是Vector是同步的,并且具有一些旧的方法,该方法没有收集框架。

1 个答案:

答案 0 :(得分:1)

当Java管理自身的内存时,请记住,我们无法完全知道列表/缓冲区/数组的状态。

载体,像的ArrayLists,具有initialCapacity,可以在构造参数传递。从这一刻开始,直到垃圾收集器运行时,所需要的大小以存储此initialCapacity被分配给矢量。

与经典数组不同,Vectors和List是可增长的。下面是当你一个元素添加到您的载体发生了什么的简单说明:

  • 如果载体是未满,则元素添加到向量

  • 如果该矢量是满的,两倍的矢量的大小

    • 就内存管理而言,这意味着您需要重新分配Vector。如果Vector之后的空间是免费的,则Vector将使用此空间。否则,存储器另一块将被分配并且整个矢量将被移动到该组块。

可以改变由该矢量生长在构造函数中的量(capacityIncrement)。默认值为2,因此容量增长非常快。

矢量已同步,但是您不应使用Iterator对其进行迭代:它们不是故障安全的(如果在迭代时修改了Vector的结构,则不会更新Iterator)。这就是为什么使用Locks和ArrayList通常比使用Vectors更安全(如果您知道如何正确使用锁)。

您可以在此处获取更多详细信息:https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html