如何修改字段的字段....如link.next.next.next(.next * n)n次

时间:2014-05-18 02:36:15

标签: java arrays list

我有一个包含链接的数组。每个链接都有一个名为next的公共字段,它可以容纳另一个链接,该链接可以容纳更多链接等。当我想删除我能做的事情时

    array[x].next = array[x].next.next;

将删除第二项。但是我希望能够删除任何项目,那么如何将其变为带变量的表单?方程式将是这样的:如果我想删除项目n我会做

    array[x](.next*(n-1)) = array[x](.next*n);

对于n = 4,哪个会出现

    array[x].next.next.next = array[x].next.next.next.next;

希望我的问题很明确。我需要知道如何这样做,因为我不能将getter或任何其他代码设置到我的链接类中,并且因为我是我的代码的唯一所有者,所以我不会不情愿地设置我的字段。 Java的。

1 个答案:

答案 0 :(得分:3)

所以,让我们说array[x].next.next.next.next。编译器接受这个并告诉运行时如何到达我们的第四个元素。它是如何做到的?嗯......

Entry current = array[x];
current = current.next;
current = current.next;
current = current.next;
current = current.next;

如果我们将其转换为for循环,我们会得到以下结果:

Entry current = array[x];
for ( int i = 0; i < 4; i++ ) {
    current = current.next;
}

事实上,这看起来很像java.util.LinkedList的方式:

/**
 * Returns the indexed entry.
 */
private Entry<E> entry(int index) {
    if (index < 0 || index >= size)
        throw new IndexOutOfBoundsException("Index: "+index+
                                            ", Size: "+size);
    Entry<E> e = header;
    if (index < (size >> 1)) {
        //  vvv  Looks familiar?
        for (int i = 0; i <= index; i++)
            e = e.next;
        //  ^^^
    } else {
        for (int i = size; i > index; i--)
            e = e.previous;
    }
    return e;
}