Метод 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];
}
1 ответ
Решение
Причина, по которой вы хотите явно установить каждый элемент null
в clear()
в том, что в противном случае вы могли бы ввести форму утечки памяти. Это elements[]
массив может содержать ссылки на объекты и предотвращать их сборку мусора.
Ваш вариант воссоздания массива с нуля будет работать (я думаю, что вы пропускаете new
хотя), но выделение нового фрагмента памяти обычно медленнее, чем очистка уже выделенного фрагмента.