【发布时间】:2015-03-08 04:40:52
【问题描述】:
我有一个全局变量masterList,它是一个HashMap。
private static HashMap<ArrayList<String>, Integer> masterList =
new HashMap<ArrayList<String>, Integer>();
我有一个递归函数 generateAnagram,它将 ArrayLists 的字谜放在这个 HashMap 中,并将列表中的单词数作为值。但是,HashMap 在第一次调用后开始混乱,并且以前的 ArrayLists 被我尝试添加的新的覆盖,但以前的值仍然存在。这导致两个键具有相同的值。 这是结果的截图 - 点击[这里]http://tinypic.com/r/ka1gli/8
private static void generateAnagram(Set<String> subsets, ArrayList<String> currList, letterMap wordMap) {
if (wordMap.count() == 0) {
System.out.println("Adding: " + currList);
masterList.put(currList, currList.size());
System.out.println("Current Master: " + masterList.toString());
} else {
for (String word : subsets) {
if (word.length() <= wordMap.count() && wordMap.isConstructionPossible(word)) {
//System.out.println("Word: " + word + " " + wordMap.isConstructionPossible(word));
wordMap.remove(word);
currList.add(word);
generateAnagram(subsets, currList, wordMap);
currList.remove(word);
wordMap.addBack(word);
}
}
}
}
【问题讨论】:
-
为什么在递归时不使用新的arrayList?如果我没记错的话,我猜你正面临这个问题,因为 arrayList 覆盖了相同的内存位置,这导致了问题
标签: java recursion hashmap anagram