In vector by default initialCapacity
is set at 10
and capacityIncrement
is also set at 10
.
Thus if we do -
Vector<String> vector = new Vector<>();
we have initialCapacity
and capacityIncrement
both set at 10
.
However, we have the flexibility to set our own values.
For example, if we do -
Vector<String> vector = new Vector<>(5,5);
we have initialCapacity
and capacityIncrement
both set at 5
.
Now, post initialization, we have the methods -
void setSize(int size)
void ensureCapacity(int capacity)
void trimToSize()
to change both size
and capacity
as per our needs.
But, how can we change the capacityIncrement
value post initialization as per our need?
You can do it using reflect.Field as below:
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;
}
}