Java中的链接列表,删除节点

时间:2016-01-12 18:31:36

标签: java data-structures

我正在使用Java编写链接列表。

为了从linkedList中删除一个节点,我只是指向下一个指针

对于Ex:3-> 4-> 5是我的链表。现在我删除4所以它将像3-> 5,并且将删除4的链接。

但是在C ++中会有free()命令删除4占用的内存空间。

这个内存空间是否可以在Java中免费使用?

3 个答案:

答案 0 :(得分:2)

Java不同,

C++有一个垃圾收集器来清除内存中未引用的位置,所以它是免费的(虽然不一定是立即的)。

答案 1 :(得分:0)

您可以使用此算法解决问题并释放无人认领的内存,我们在Java中将垃圾收集器命名为System.gc()。你可以用这个人来完成这项工作。

public boolean delete(final int searchValue)
{
    Node tmpNode = head;
    Node prevNode = null;
    boolean deletedANode = false;

    while (tmpNode != null)
    {
        if (tmpNode.data == searchValue)
        {
            if (tmpNode == head)
            {
                head = head.next;
            }
            else
            {
                prevNode.next = tmpNode.next;
            }

            deletedANode = true;
        }
        else
        {
            // only advance the prevNode when there's no match.
            prevNode = tmpNode;
        }

        tmpNode = tmpNode.next;
    }

    return deletedNode;


}

答案 2 :(得分:0)

一个鲜为人知的事实是Java实际上有4 garbage collectors,而不只是一个。

您为JVM指定的垃圾收集器参数可能会影响您的应用程序性能。并行'默认情况下,垃圾收集器处于打开状态,但如果应用程序的堆大小超过4GB,则较新的G1垃圾收集器可能更合适。

一般来说,任何垃圾收集调整都应该绝对完成,你应该监视垃圾收集日志作为起点。有关如何调整GC性能的最佳信息可以在here

找到