ran*_*don 0 java algorithm linked-list
全部,如果我要编写一个函数来从Java中的linkedList删除一个节点(给定headNode和数据作为输入参数).我会找到具有"node.data = data"的节点,并通过将其前一个节点指向其下一个节点*^来删除它.我的问题是,我们是否必须将"待删除"节点指向null?释放记忆?或者GC将处理堆中不再访问的对象.
*^:比如A-> B-> C-> D,如果B.data =数据,则得A-> C. B-> Null是否必要?
如果不清楚请告诉我,我会编辑它.谢谢.
如果你想删除Node B,你只需要A指向C.垃圾收集器将处理你的B节点,因为它不会有任何引用.
以下解释引自http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html
如果对象无法从任何活动线程或任何静态引用访问,则符合垃圾收集或GC的条件,换句话说,如果对象的所有引用都为空,则可以说对象符合垃圾收集条件.因此,如果对象A具有对象B的参考和对象B对象A的参考和他们没有任何其他活动引用那么这两个对象A和B将符合垃圾回收循环依赖,不作为参考.
通常,在以下情况下,对象有资格在Java中进行垃圾回收:
1)该对象的所有引用都显式设置为null,例如object = null
2)在块内创建对象,并且一旦控制退出该块,引用就会超出范围.
3)父对象设置为null,如果对象保存另一个对象的引用,并且当您将容器对象的引用设置为null时,子对象或包含对象自动符合垃圾回收的条件.
4)如果一个对象只有通过WeakHashMap的实时引用,它将有资格进行垃圾回收.