【发布时间】:2011-06-07 22:10:26
【问题描述】:
我正在尝试在 Java 中实现一个简单的 HashTable,它使用链表来解决冲突,这在 C 中很容易做到,但我不知道如何在 Java 中做到这一点,因为你不能使用指针...
首先,我知道这些结构已经用 Java 实现了,我不打算使用它,只是在这里培训......
所以我创建了一个元素,它是一个字符串和一个指向下一个元素的指针:
public class Element{
private String s;
private Element next;
public Element(String s){
this.s = s;
this.next = null;
}
public void setNext(Element e){
this.next = e;
}
public String getString(){
return this.s;
}
public Element getNext(){
return this.next;
}
@Override
public String toString() {
return "[" + s + "] => ";
}
}
当然,我的 HashTable 有一个 Element 数组来存储数据:
public class CustomHashTable {
private Element[] data;
这是我的问题:
例如,我想实现一个在链表末尾添加元素的方法(我知道在链表开头插入元素会更简单、更高效,但同样,这只是用于培训目的)。没有指针我该怎么做?
这是我的代码(如果 e 是指针,它可以工作......):
public void add(String s){
int index = hash(s) % data.length;
System.out.println("Adding at index: " + index);
Element e = this.data[index];
while(e != null){
e = e.getNext();
}
e = new Element(s);
}
谢谢!
【问题讨论】:
-
您是否真的尝试过运行您的示例代码?因为对于所有意图,Java 引用与 C 指针相同。
-
一旦你搞定了这个,你就可以涉足泛型了!
-
@Anon:他们是为了这个例子,但不是全部。
-
除非您的示例
add()方法将失败,因为您没有跟踪列表的尾部,并且没有将新的Element分配给尾部... -
@Joey - 它们不等价的地方是(1)数组名称不是指针,(2)你不能将指针转换为整数,以及(3)你不能将指针强制转换为任意类型。您不需要任何这些功能来实现链接列表,或者就此而言,大多数现实世界的应用程序。当您确实需要这些功能时,Java 会提供变通方法。
标签: java pointers linked-list