我在我的程序中创建 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/