No, ensureCapacity
doesn’t change the logical size of an ArrayList
– it changes the capacity, which is the size the list can reach before it next needs to copy values.
You need to be very aware of the difference between a logical size (i.e. all the values in the range [0, size)
are accessible, and adding a new element will add it at index size
) and the capacity which is more of an implementation detail really – it’s the size of the backing array used for storage.
Calling ensureCapacity
should only ever make any difference in terms of performance (by avoiding excessive copying) – it doesn’t affect the logical model of what’s in the list, if you see what I mean.
EDIT: It sounds like you want a sort of ensureSize()
method, which might look something like this:
public static void ensureSize(ArrayList<?> list, int size) {
// Prevent excessive copying while we're adding
list.ensureCapacity(size);
while (list.size() < size) {
list.add(null);
}
}