java - 使用 ArrayList 作为值填充 HashTable

标签 java arraylist hashtable

我在我的程序中创建 HashTable 时遇到问题,我正在创建 WordLadder 游戏。 基本上我希望我的 HashTable 包含唯一单词的键和值将是一个字母差异的单词。问题是,当我打印出来检查我放入其中的内容时,它会完美地打印出我想要的内容,但是当我返回 HashTable 时,它​​会返回我的废话。

我生成哈希表的代码如下:

public Hashtable<String, ArrayList<String>> findNeighbors(){
      Hashtable<String, ArrayList<String>> data = new Hashtable<String, ArrayList<String>>();
      ArrayList<String> neighb = new ArrayList<String>();
      for(int i=0; i < 5; i++){
       for(int j=0; j < 5; j++){
        if (isNeighbor(words.get(i), words.get(j))) {
         neighb.add(words.get(j));
        }
       }
       data.put(words.get(i), neighb);
       //System.out.println(words.get(i)+ " "+data.get(words.get(i))); <This Works perfectly fine
       System.out.println(data.toString()); //<This returns nonsense
       neighb.clear();
      }

      return data;
     }

public boolean isNeighbor(String a, String b){
      int diff = 0;
      for (int i = 0; i < a.length(); i++){
       if(a.charAt(i) != b.charAt(i)){
        diff++;
       }
      }
      return diff==1;
     }

最佳答案

您不能使用相同的引用将所有键放入 HashTable 中。每次调用 clear() 时,它都会清除您添加的所有键都相同的列表。 因此为每个键创建 ArrayList

  for(int i=0; i < 5; i++){
  ArrayList<String> neighb = new ArrayList<String>();<-- Move inside loop
   for(int j=0; j < 5; j++){
    if (isNeighbor(words.get(i), words.get(j))) {
     neighb.add(words.get(j));
    }
   }
   data.put(words.get(i), neighb);
   //System.out.println(words.get(i)+ " "+data.get(words.get(i))); <This Works perfectly fine
   System.out.println(data.toString()); //<This returns nonsense

  }

关于java - 使用 ArrayList 作为值填充 HashTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038880/

相关文章:

java - 使用 Collections 方法对类中的特定内容进行排序

java - 如何处理 Spark rdd 生成上的 CSV 文件列?

java - 如何处理不遵守 Accept : application/json using Jersey and Jackson 的 Web 服务

java - 将 ArrayList<CustomObject> 传递给接受 Java 中的 ArrayList<Object> 作为参数的函数

java - 实现一个包含 k = Date object v = array 的 hash map

java - 用 map 实现树

java - 如何获得在哈希表中使用的最佳数字?

javascript - 如果键不存在,如何在关联的 JavaScript 数组中获取最近的键索引?

java.lang.IllegalArgumentException : Not a managed type in spring boot app

java - 如何将 Eclipse Java SE 应用程序转换为 J2E 应用程序?