Tüketicimdeki bir BlockingQueue'yi boşaltmak için bir LinkedList kullandığım için, üzerinde çalıştığım bir projede LinkedList.Clear() öğesinin O (1) olduğunu varsayıyordum Bu, yüksek bir verime ihtiyaç duyuyor, daha sonra LinkedList'i temizliyor ve yeniden kullanıyor. Neden LinkedList.Clear() O değil (1)
(OpenJDK) kodu yaptığı gibi bu varsayım, yanlış çıkıyor bu: Bu biraz şaşırtıcıEntry<E> e = header.next;
while (e != header) {
Entry<E> next = e.next;
e.next = e.previous = null;
e.element = null;
e = next;
}
vardır basitçe kendi başlığını "unutmak" could not herhangi bir sebep LinkedList.Clear .next ve header.previous üye?
// Clearing all of the links between nodes is "unnecessary", but:
// - helps a generational GC if the discarded nodes inhabit
// more than one generation
// - is sure to free memory even if there is a reachable Iterator
makul açıkça niçin yaptıklarını:
http://www.docjar.com/html/api/java/util/LinkedList.java.html Harmony o O (1), burada bulabileceğiniz – Bozho
İyi açıklama vardır/575995/clear-impl-in-Javas'ın-LinkedList. Tarafından cevaplandı Jason – smas