如何通过引用修改类数组元素

时间:2011-04-24 18:04:58

标签: java

我是Java新手。我无法弄清楚如何在没有指针的情况下做到这一点:

//具有单独链接的哈希表

class HashTbl {
  class Node {
    int data;
    Node next;
  }

  private Node tbl[];

  HashTbl(int size) {
    tbl[] = new Node[size * 1.25];
  }

  public int insert(int item) {
    // insert data
  }

  public Node lookup(int item) {
    // search for item in the hashtable
    // the item was found at array index 'idx'
    return tbl[idx];
  } 

  public int remove (int item) {
    Node n = lookup(item);
    n = null;  // <--- this obviously doesn't work, what i want to do is set tbl[idx] to null
  }

}

将本地引用变量设置为null不会影响实际数组。 在c ++中,我将返回一个指向数组元素的指针,以便我可以通过指针将数组元素设置为Null。 现在,Java中没有指针,那么我怎样才能使这个工作?

更新: 返回数组索引或使用返回匹配索引的单独函数是2种可能的解决方法。 但我不仅仅是在寻找这个特定计划的解决方案。 一般来说这个问题怎么样?

4 个答案:

答案 0 :(得分:1)

最简单的方法:让lookup返回idx并在remove中使用它。或者,如果您需要lookup方法在该表单中为public,请创建一个返回索引的新私有方法。

答案 1 :(得分:1)

只需这样做:

tbl[item] = null;

更新:我错过了lookup()中有一些遗漏代码的事实。这样做:

private int findIdx(int item) {
  // search for item in the hashtable
  // the item was found at array index 'idx'
  return idx;
} 

public Node lookup(int item) {
  return tbl[findIdx(item)];
}   

public int remove (int item) {
  tbl[findIdx(item)] = null;
}

答案 2 :(得分:1)

public int lookup(int item) {
  // search item in hash, return index
  return idx;
} 

public int remove (int item) {
  int idx = lookup(item);
  tbl[idx] = null;
}

答案 3 :(得分:0)

我建议您使用除常见数组之外的ArrayList。

List<Node> tbl = new ArrayList<Node>();

查看java手册以获取详细信息。