temo questa è una domanda davvero stupida, ma qui va:clear() impl in ListaLinkata di Java
Perché il metodo chiaro nella implementazione predefinita ListaLinkata di Java fastidio a camminare l'elenco e sganciare tutti i nodi? Perché non solo sganciare l'intestazione e lasciare collegato il resto dell'elenco: il GC lo otterrà comunque, no?
Ecco il metodo:
/**
* Removes all of the elements from this list.
*/
public void clear() {
Entry<E> e = header.next;
while (e != header) {
Entry<E> next = e.next;
e.next = e.previous = null;
e.element = null;
e = next;
}
header.next = header.previous = header;
size = 0;
modCount++;
}
Perché camminare? Perché non saltare semplicemente a header.next = header.previous = header;
?
Il meglio che posso capire è che aiuta il GC ...? Questo link http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442 suggerisce questo.
TIA ...
Sono stato impostato per non essere d'accordo, dicendo che non c'è modo per codice esterno di ottenere un riferimento a una voce LinkedList $ ... ma indirettamente tramite LinkedList $ ListItr si può sicuramente ... Grazie e buona cattura! – overthink
Cosa mancherebbe un nodo? Un Iterator o subList, ma questi non sarebbero validi, quindi non ci sarebbe da mantenere. –
@Tom: se non si esegue questa operazione, la subList e Iterator continueranno a funzionare, ma il framework di raccolta tenta di essere a prova di errore (ma non lo garantisce). –