我是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种可能的解决方法。 但我不仅仅是在寻找这个特定计划的解决方案。 一般来说这个问题怎么样?
答案 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手册以获取详细信息。