Tôi lo sợ đây là một câu hỏi thực sự ngu ngốc, nhưng ở đây đi:clear() impl trong Java's LinkedList
Tại sao phương pháp rõ ràng trong thực thi mặc định LinkedList của Java bận tâm đi bộ danh sách và bỏ tất cả các nút? Tại sao không chỉ bỏ tiêu đề và để phần còn lại của danh sách được kết nối - GC sẽ lấy nó, đúng không?
Dưới đây là phương pháp:
/**
* 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++;
}
Tại sao đi nó? Tại sao không chỉ bỏ qua đến header.next = header.previous = header;
?
Hình ảnh tốt nhất tôi có thể giúp GC ...? Liên kết này http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442 loại gợi ý rằng.
TIA ...
Tôi đã hoàn toàn không đồng ý, nói rằng không có cách nào để mã bên ngoài tham chiếu đến LinkedList $ Entry ... nhưng gián tiếp thông qua LinkedList $ ListItr bạn chắc chắn có thể ... Cảm ơn và nắm bắt tốt! – overthink
Điều gì sẽ giữ nút? Một Iterator hoặc subList, nhưng chúng sẽ không hợp lệ để không giữ lại. –
@Tom: nếu bạn không làm điều này thì danh sách con và Iterator sẽ tiếp tục hoạt động, nhưng khung bộ sưu tập sẽ cố gắng thất bại (nhưng không đảm bảo được). –