Dans la classe ArrayList
:
private Object[] grow(int minCapacity) { return elementData = Arrays.copyOf(elementData, newCapacity(minCapacity)); } private Object[] grow() { return grow(size + 1); // renvoie un tab. de cette taille au minimum } // (mais plus probablement dont la taille est doublée) private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData = grow(); // renvoie un tab. plus grand elementData[s] = e; size = s + 1; } public boolean add(E e) { modCount++; add(e, elementData, size); return true; }
Dans le cas où la capacité initiale est fixée et assez grande, grow()
n'est jamais appelée. Mais sinon, cela arrive quand le tableau elementData
est rempli.
if
et devrait ensuite appeler grow() puis faire appel à grow(129) (c'est à dire size + 1). Mais il est dé-schédulé juste avant le grow().