如何修改字段字段的公共字段...如链接.next.next.next(.next * n)n次

时间:2014-05-18 02:42:57

标签: java arrays map hyperlink

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

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

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

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

如果n = 4,我想exand到

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

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

3 个答案:

答案 0 :(得分:1)

正如其他答案中所提到的,您正在实现的是一个链表,您可能最适合利用Java的库。

为了解决你提出的问题,你可能会要求提供第n跳参考的功能

Link getLink(Link link, int hops){
  Link retVal = link;
  for (int i = 0; i < hops; i++){
    if (link == null){
       //hops is too large. Do something to indicate error
    }
    else{
       retVal = retVal.next;
    }
  }
  return retVal;
}

然后你可以执行

getLink(array[x],2).next = getLink(array[x],4);

或者如果你想使用反射(不推荐,因为反射相对昂贵),那么你可以做类似的事情

Link myLink = array[x];
Field next = Link.class.getField("next");
//assume proper error handling
for (int i = 0; i < hops; i++){
  myLink = (Link) next.getObject(myLink);
  //assume proper error handling
}

答案 1 :(得分:0)

似乎你所拥有的是一系列链接列表。我不知道你为什么担心这种花哨的语法扩展的东西,当什么工作得很好是一种删除第n个节点的方法,并且有的实现在互联网上浮动。< / p>

事实上,您可以查看java.util.LinkedList的来源并自行复制该实现,如果您有单链表,可以进行简单修改。基本公式是:

  1. 从第一个节点迭代,重复查找下一个节点,直到到达第n个节点
  2. 取消链接该节点

答案 2 :(得分:0)

使用简单的循环步进n次。这是删除第n个的一些代码:

Link link = array[x], prev = link;
int n = ?;

for (int i = 0; i < n; i++) {
    prev = link;
    link = link.next;
}
prev.link = link.next;