метод clear () в ArrayDeque

Почему в ArrayDeque для очистки этого, используя (1) do-while для удаления каждого элемента, вместо этого создайте новый массив с начальным размером и (2) перезаписать массив, где содержатся элементы?

(1)

public void clear() {
    int h = head;
    int t = tail;
    if (h != t) { // clear all cells
        head = tail = 0;
        int i = h;
        int mask = elements.length - 1;
        do {
            elements[i] = null;
            i = (i + 1) & mask;
        } while (i != t);
    }
}

(2)

public void clear() {
     head = tail = 0;
     elements = null;
     elements = (T[]) Object[START_SIZE]; 
}
4 голоса | спросил Vlad Pavliuk 22 Maypm18 2018, 20:18:03

1 ответ


0
Причина, по которой вы хотите явно установить для каждого элемента значение ---- +: = 0 =: + ---- в ---- +: = 1 =: + ----, заключается в том, что в противном случае вы можете ввести формуутечки памяти.То есть массив ---- +: = 2 =: + ---- может содержать ссылки на объекты и предотвращать их сборку мусора.Ваш вариант воссоздания массива с нуля сработал бы (я думаю, что вам не хватает ---- +: = 3 =: + ---- хотя), но выделение нового фрагмента памяти обычно медленнее, чем очисткауже были выделены.
ответил ᴇʟᴇvᴀтᴇ 22 Maypm18 2018, 20:26:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132