问题出在输出中,聪明一词加了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 }
答案 0 :(得分:4)
您的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
方法,然后打印出{{1}}的元素。