Упрощение функции ArrayList Grow(int minCapacity)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Упрощение функции ArrayList Grow(int minCapacity)

Сообщение Anonymous »

В классе ArrayList пакета java.util я заметил следующие строки кода

Код: Выделить всё

    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)];
}
}
В строке 3 у нас есть оператор if. Конструкция такова, что блок else выполняется только тогда, когда oldCapacity == 0 и elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA. Теперь из-за строки 2 и условия, что DEFAULTCAPACITY_EMPTY_ELEMENTDATA является частной, статический окончательный oldCapacity == 0 является избыточным. Весь фрагмент кода можно упростить до

Код: Выделить всё

    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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»