Почему не LinkedList.Clear () O (1)

Я предполагал, что LinkedList.Clear () имеет значение O (1) в проекте, над которым я работаю, поскольку я использовал LinkedList для истощения BlockingQueue у моего потребителя, которому требуется высокая пропускная способность, после чего очистил и повторно использовал LinkedList.

Оказывается, это предположение было неверным, поскольку код (OpenJDK) делает следующее:

    Entry<E> e = header.next;
    while (e != header) {
        Entry<E> next = e.next;
        e.next = e.previous = null;
        e.element = null;
        e = next;
    }

Это было немного удивительно, есть ли веская причина, по которой LinkedList.Clear не может просто «забыть» свои элементы header.next и header.previous?

26
задан skaffman 1 March 2011 в 22:37
поделиться