gpt4 book ai didi

java - Java 中的清除 protected 双向链表

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:25 25 4
gpt4 key购买 nike

我目前正在为 CS 考试学习,我想到了以下问题:如果我有一个包含两个字段(一个 head-guard 和 tail-guard)的双向链表并且我想清除列表(使它是空的)。将尾节点设置为 next 就足够了吗? -我的头后面的元素,反之亦然(previous - 尾部的节点是头)。垃圾回收是否会删除这两者之间的元素(元素相互引用,但不存在从外部对该“ block ”的节点的引用?

为了更清楚一点:如果我有这个:
|HEAD| <--> |node_01| <--> | . . .| <--> |node_n| <--> |TAIL|

然后我更改了 next/previous头部和尾部的节点:
|HEAD| <--> |Tail|

Java会删除node_01 - node_n吗? (注意单箭头):
|HEAD| <-- |node_01| <--> | . . . | <--> |node_n| --> |TAIL|

它们都相互引用,但不存在来自外部的引用 - 因此我无法联系到它们。或者这是内存泄漏?

最佳答案

在您的特定示例中,GC 完全清除列表。这是因为它们无法从图到达应用程序对象图的根对象。

在执行clear()您可以观察到每个对象也都设置为 null,这是为了防止在某些对象引用它时发生任何内存泄漏。但在你的情况下,你明确表示这不可能发生。

clear的实现供引用:

/**
* 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++;
}

关于java - Java 中的清除 protected 双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com