I saw the java doc for ArrayList and found that the initial capacity of ArrayList is 10.
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
I think it would make sense if it were any power of 2, but why 10?
I also checked HashMap’s initial capacity, and it’s 16 which makes sense.
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 16;
/**
* Constructs an empty <tt>HashMap</tt> with the default initial capacity
* (16) and the default load factor (0.75).
*/
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
Is there any specify reason behind the number 10?
The
ArrayListis simple growing array. When trying to add element, and the buffer size is exceeded, it is simply growing. So the initial size can be any positive value.The 1 would be too little. Even with a few elements we will have a few resize operations.
The 100 would be a loss of space.
So, the 10 is compromise. Why 10 and not 12 or 8? First hint, that the typical use cases were analysed and this is the best fit between lost of performance and lost of space. However, I think, seeing the Sun’s original code, that it wasn’t analysed so deeply and it is an arbitrary ‘not too small, not too big’ number.