java arraylist ensureCapacity not working

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);
    }
}

Leave a Comment