Java 中的 Vector ensureCapacity() 方法及示例
在 Java 中,Vector
是一个被广泛使用的类,它的作用是实现动态数组。在创建一个 Vector
对象时,可以为其指定一个初始容量。
Vector<Integer> vector = new Vector<>(10);
在实际使用中,我们可能需要频繁地向 Vector
中添加元素。如果此时 Vector
的容量不足以存储需要添加的元素,那么就需要进行动态扩容。
为了避免频繁的扩容操作带来的性能损失,在添加大量元素前,可以手动使用 ensureCapacity
方法增加 Vector
的容量。
ensureCapacity() 方法的介绍
Vector
中的 ensureCapacity
方法用于增加 Vector
的容量,该方法的定义如下:
public void ensureCapacity(int minCapacity) {
if (minCapacity > elementData.length) {
grow(minCapacity);
}
}
其中,minCapacity
表示需要增加的最小容量。如果需要增加容量的量小于当前 Vector
的容量,则该方法不会改变 Vector
的容量。
如果需要增加容量的量大于当前 Vector
的容量,则该方法会调用内部的 grow
方法进行扩容。grow
方法的定义如下:
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
其中,minCapacity
表示需要增加的最小容量。
首先,grow
方法会计算出将要扩容后的新容量。新容量的计算公式为:
int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);
如果 capacityIncrement
大于 0,则使用 capacityIncrement
作为增量;否则,使用原来的容量 oldCapacity
乘以 2 作为增量。
接着,grow
方法会判断如果新容量小于 minCapacity
,则将新容量设置为 minCapacity
。
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
最后,grow
方法会判断如果新容量超过了 MAX_ARRAY_SIZE
,则会调用 hugeCapacity
方法抛出异常,否则会使用 Arrays.copyOf
方法将原有的数组复制到新数组中。
ensureCapacity() 方法的示例
下面,我们来看一个关于 Vector
中的 ensureCapacity
方法的示例。
Vector<Integer> vector = new Vector<>();
System.out.println("当前 Vector 的容量:" + vector.capacity()); // 10
// 插入 10 个元素,此时 Vector 的容量为 10
for (int i = 0; i < 10; i++) {
vector.add(i);
}
System.out.println("插入 10 个元素后 Vector 的容量:" + vector.capacity()); // 10
vector.ensureCapacity(20);
System.out.println("使用 ensureCapacity(20) 后 Vector 的容量:" + vector.capacity()); // 20
// 插入 20 个元素,此时 Vector 的容量为 40
for (int i = 0; i < 20; i++) {
vector.add(i);
}
System.out.println("插入 20 个元素后 Vector 的容量:" + vector.capacity()); // 40
在上述代码中,我们首先创建了一个默认容量为 10 的 Vector
对象,并插入了 10 个元素。此时,Vector
的容量与初始容量相同,为 10。
接着,我们使用了 ensureCapacity(20)
方法,将 Vector
的容量增加至 20。此时,Vector
的容量变为 20。
最后,我们再次向 Vector
中插入 20 个元素,发现当插入第 12 个元素时,Vector
内部进行了扩容操作。扩容后,Vector
的容量变为 40。
结论
Vector
中的 ensureCapacity
方法可以手动增加 Vector
的容量,避免频繁的扩容操作带来的性能损失。在实际使用中,如果我们需要向 Vector
中插入大量元素,可以先使用 ensureCapacity
方法增加 Vector
的容量,从而提高性能。