该程序的目标是创建一个哈希表,其中每个插入的整数都映射到数组中该数字%10的位置。由于某种原因,我正在为表的每个索引创建相同的链接列表。例如,最终输出当前为:
0:28 15 8 18 25
1:28 15 8 18 25
2:28 15 8 18 25
等
应该在什么时候出现:
0:空。
1:空。
2:空。
3:空。
4:空。
5:15 25
6:空。
7:空。
8:28 8 18
9:空。
这是我的代码,每个类用斜杠分隔:
public class myHash{
public static LinkedList[] array = new LinkedList[10];
public static int hash(int value){
return value % 10;
}
public static void initArray(){
for(int i = 0; i < 10; i++){
array[i] = new LinkedList();
}
}
public static void insert(int value){
int index = hash(value);
System.out.println("Inserting " + value + " at location " + index + ".");
LinkedList list = array[index];
list.insertData(value);
array[index] = list;
}
public static void delete(int value){
int index = hash(value);
LinkedList list = array[index];
list.remove(value);
}
public static void dumphash(){
for(int i = 0; i < 10; i++){
LinkedList list = array[i];
System.out.println(i + ":" + list.dumplist());
}
}
public static void main(String args[]){
initArray();
insert(1);
insert(5);
insert(28);
delete(5);
insert(15);
insert(8);
dumphash();
delete(1);
insert(18);
insert(25);
delete(33);
dumphash();
}
}
////////////////////////////
public class LinkedList{
static Node head;
public LinkedList() {
head = null;
}
public void insertData(int data){
Node node = new Node();
node.data = data;
node.next = null;
if(head == null){
head = node;
}
else{
Node n = head;
while(n.next != null){
n = n.next;
}
n.next = node;
node.setValue(data);
}
}
public static void remove(int data){
Node node = head;
boolean removed = false;
if(node.getValue() == data){
Node temp = head;
head = head.next;
temp.next = null;
System.out.println(data + " has been removed.");
removed = true;
}
else{
while(node.next != null){
if(node.next.getValue() == data){
node.next = node.next.next;
System.out.println(data + " has been removed.");
removed = true;
}
else{
node = node.next;
if(node.next == null && removed == false){
System.out.println("Error: " + data + " has not been inserted.");
}
}
}
}
}
public static String dumplist(){
String fullList = "";
Node node = head;
if(node.getValue() == null){
fullList = " Empty.";
}
else{
while(node.next != null){
fullList = fullList + " " + node.data;
node = node.next;
}
fullList = fullList + " " + node.data;
}
return fullList;
}
}
////////////////////////////
public class Node{
int data;
Node next;
public Integer getValue(){
return data;
}
public void setValue(int val){
this.data = val;
}
}
任何帮助将不胜感激!
答案 0 :(得分:4)
您的问题是,您已经声明了所有成员变量static
;这意味着每个类只有一个实例,而每个对象只有一个实例。因此,您的所有LinkedList
实例都指向与Node
相同的head
。除了static
方法之外,这里根本不需要main
。