Код: Выделить всё
private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {//Line3
int newCapacity = ArraysSupport.newLength(oldCapacity,//Line 4
minCapacity - oldCapacity, /* minimum growth */
oldCapacity >> 1 /* preferred growth */);
return elementData = Arrays.copyOf(elementData, newCapacity);
} else {
return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
}
}
Код: Выделить всё
private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
if (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
int newCapacity = ArraysSupport.newLength(oldCapacity,
minCapacity - oldCapacity, /* minimum growth */
oldCapacity >> 1 /* preferred growth */);
return elementData = Arrays.copyOf(elementData, newCapacity);
} else {
return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
}
}
Я хотел понять использование DEFAULTCAPACITY_EMPTY_ELEMENTDATA в реализации ArrayList. Поскольку это широко используемая библиотека, я ожидаю, что у нее будет действительно эффективный код. Я не думаю, что в моих рассуждениях есть что-то неправильное. Если сообщество мне поможет, мы сможем сделать эту библиотеку быстрее.
Подробнее здесь: https://stackoverflow.com/questions/790 ... y-function