在矢量中,默认情况下< code>initialCapacity设置为< code>10,并且< code>capacityIncrement也设置为< code>10。
因此,如果我们这样做-
Vector<String> vector = new Vector<>();
我们将initialCapacity
和capacityIncrement
都设置为10
。
然而,我们可以灵活地设定自己的价值观。
例如,如果我们做了-
Vector<String> vector = new Vector<>(5,5);
我们将初始
容量和容量增量
都设置为 5
。
现在,初始化后,我们有方法-
< code > void setSize(int size) < br > < code > void ensureCapacity(int capacity) < br > < code > void trim tosize()
根据我们的需要改变< code >尺寸和< code >容量。
但是,我们如何根据需要在初始化后更改容量增量
值?
你可以用反射来做。字段如下:
public static void main (String[] args){
Vector<String> vector = new Vector<>(5, 5);
System.out.println(getMyCapacityIncrement(vector));
setMyCapacityIncrement(vector, 9);
System.out.println(getMyCapacityIncrement(vector));
}
private static void setMyCapacityIncrement(Vector<String> myVector, int capacityIncrement){
try {
Field field = myVector.getClass().getDeclaredField("capacityIncrement");
field.setAccessible(true);
field.set(myVector, capacityIncrement);
field.setAccessible(false);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
private static int getMyCapacityIncrement(Vector<String> myVector) {
try {
Field field = myVector.getClass().getDeclaredField("capacityIncrement");
field.setAccessible(true);
return field.getInt(myVector);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return -1;
}
}
为什么创建后需要更改容量增量?
如果您知道生成的List
的(近似)大小,您可以使用合适的容量创建它,并且默认增量被调整为良好,请参见ArrayList效率和大小。
ArrayList
中不存在更改增量的方法的原因是因为它是不必要的。这种微调整不是必需的(或者无论如何可以通过ensureSpace()
来实现),因此它使API更干净,没有它。