Java 将节点添加到LinkedList时,幕后会发生什么(堆、堆栈等)?

Java 将节点添加到LinkedList时,幕后会发生什么(堆、堆栈等)?,java,object,linked-list,heap,aliasing,Java,Object,Linked List,Heap,Aliasing,编辑:我搜索了youtube,没有关于linkedlist和heap的任何信息 垃圾收集器何时擦除温度?我知道它应该,但看不到在哪里 我很难理解它。凭直觉我会写 public void addToHead(IntNode node) { IntNode temp = _head; _head = node; node.setNext(temp); } 我知道这是不对的,但我觉得我需要了解那里的对象和地址是怎么回事,才能抓住重点 第一行:我创建一个临时文件,并将其指向相同

编辑:我搜索了youtube,没有关于linkedlist和heap的任何信息 垃圾收集器何时擦除温度?我知道它应该,但看不到在哪里

我很难理解它。凭直觉我会写

public void addToHead(IntNode node) {
    IntNode temp = _head;
    _head = node;
    node.setNext(temp);
}
我知道这是不对的,但我觉得我需要了解那里的对象和地址是怎么回事,才能抓住重点

第一行:我创建一个临时文件,并将其指向相同的地址\u head points
秒行:现在head指向address节点点,(node.next等于head.next)
第三行:node.next变为temp..

我说得对吗这项工作如下:

  • 节点
    位于堆栈上,并引用要插入的堆对象(A)
  • \u head
    可能是堆对象(列表)的成员,并引用当前位于列表头部的堆对象(B)
  • 在堆栈上创建引用
    temp
    ,然后该引用也引用该对象(B)
  • 您将引用
    \u head
    更改为
    节点所引用的堆对象,因此
    \u head
    现在引用(A)
  • 现在,您可以修改(A),它由
    \u head
    节点
    引用,以使其
    下一个
    成员引用(B)
  • (A)和(B)都有一个始终至少为1的引用计数,因此GC不会在其中任何一个上运行
  • 退出函数后,将回收引用的堆栈内存,并且只要引用了它们,堆对象就会一直存在
  • 从函数重新调整后,只要列表仍然存在,(A)由列表头引用,(B)由(A)的
    next
    -成员引用,依此类推,那么垃圾收集不会声明任何内容

  • \u头=节点但是那老脑袋怎么办?想想把回形针连在一起。你不能每次得到一个新的剪辑就删除现有的链。您必须将现有链连接到新的回形针。它的工作原理与此相同:您必须将现有的节点链附加到新的头上。我理解这一点,但堆和地址是怎么回事。?临时工呆在那里?每次我用这个方法时,另一个临时工会留在那里?当它消失的时候?它是如何工作的…谢谢midor我明白了,再问几个问题-基本上每次我向列表中添加一个新节点时,所有这些节点都有一个指向它们的临时点?我想这就是我困惑的地方(“暂时”)-如果节点和_头现在引用(A),我可以写_头吗?_next=temp?您可以,但随后您创建了一个对自己的引用,在迭代时,您将在一个循环中结束。创建temp以保留对(B)的引用,同时将head分配给指向(a)的点。否则,您将无法再找到(B)。更合乎逻辑的做法是将最后一行更改为_head.setNext(temp)。基本上你想做的就是从这个(B)->。。。。本条(A)->(B)->。。。。。您的列表非常不寻常,因为您传入了列表节点,因此理论上可以消除temp,并执行node.next=\u head_头部=节点;
    
    _head = node;