问题在于输出单词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的元素。

07-24 09:37