在linkedlist添加节点时,幕后发生了什么(堆,堆栈等)


public void addToHead(IntNode node) {
    IntNode temp = _head;
    _head = node;
    node.setNext(temp);
}

编辑:我搜索了youtube,nothig在那里ronkedlist和堆垃圾收集器什么时候擦除temp?我知道应该,但看不到哪里。

我很难理解它。直觉我只是写

_head = node;

我知道这是不对的,但是我觉得我需要用对象和地址来理解那里发生了什么以获取重点...

第一行:我创建一个温度,并将其指向相同的adress _head点
秒线:现在头指向adress节点点,(node.next等于head.next)
第三行:现在node.next变为温度..
我是对的

这可以如下:

  1. node在堆栈上,并引用了您要插入的堆(a)
  2. _head大概是堆对象的成员(列表),并引用了当前位于列表头的堆(b)。
  3. 您在堆栈上创建参考temp,然后引用该对象(b)
  4. 您将参考_head更改为node引用的堆,因此_head现在参考(a)
  5. 您现在修改(a),由_headnode引用,以其next -Member参考(B)
  6. (a)和(b)的参考计数一直至少为一个,因此GC都不在任何一个上运行。
  7. 退出函数后,收回了引用的堆栈记忆,并且只要引用了堆对象。
  8. 从函数重新调整后,只要您的列表仍然存在,(a)由列表头引用,(b)由(a)的 next -ember(a)引用,等等,依此类推,因此,垃圾收集没有任何要求。

相关内容

  • 没有找到相关文章

最新更新