为什么我的程序为数组的每个索引创建相同的链接列表?

时间:2019-02-28 03:05:44

标签: java data-structures hashtable

该程序的目标是创建一个哈希表,其中每个插入的整数都映射到数组中该数字%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;
   }
}  

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

您的问题是,您已经声明了所有成员变量static;这意味着每个类只有一个实例,而每个对象只有一个实例。因此,您的所有LinkedList实例都指向与Node相同的head。除了static方法之外,这里根本不需要main