问题在于输出单词clever被添加了2次。您能否告诉我为什么两次添加具有相同键的重复值。在此先感谢您的帮助!
package HashMap;
import java.util.HashMap;
import java.util.Set;
public class Thesaurus {
HashMap<String, String> words =new HashMap<String, String>();
public void add(String x,String y)
{
if (!words.containsKey(x))
words.put(x, y);
else if (!words.containsValue(y))
words.put(x, words.get(x) + " " + y + " ");
}
public void display()
{
System.out.println(words);
}
public static void main(String[] args) {
Thesaurus tc = new Thesaurus();
tc.add("large", "big");
tc.add("large", "humoungus");
tc.add("large", "bulky");
tc.add("large", "broad");
tc.add("large", "heavy");
tc.add("smart", "astute");
tc.add("smart", "clever");
tc.add("smart", "clever");
tc.display();
}
}
输出
{smart=astute clever clever , large=big humoungus bulky broad heavy }
最佳答案
您的else if
是问题。您正在检查!words.containsValue(y)
,它将检查是否有值clever
,而没有。只有astute clever
。这将导致执行words.put(x, words.get(x) + " " + y + " ");
,并因此将clever
添加到smart
的索引中。
您的add
方法只能确保单个单词(而不是多个单词)的值的唯一性。
您可以通过将HashMap
单词重新定义为HashMap<string, HashSet<string>>
并使用该类上的方法来解决此问题。您必须更改您的display
方法,以打印出HashSet
的元素。