【问题标题】:why does the values repeat?为什么值会重复?
【发布时间】:2012-11-23 23:22:59
【问题描述】:

问题是在输出中,单词 smart 被添加了 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 }

【问题讨论】:

  • 你试过一步步调试吗?

标签: java string hashmap


【解决方案1】:

您的else if 是问题所在。您正在检查!words.containsValue(y),它将检查是否有一个值clever,但没有。只有astute clever。这将导致执行words.put(x, words.get(x) + " " + y + " ");,并因此将clever 添加到smart 的索引中。

您的add 方法只能保证单个词的值的唯一性,而不是多个。

您可以通过将 HashMap 单词重新定义为 HashMap&lt;string, HashSet&lt;string&gt;&gt; 并使用该类上的方法来解决此问题;您必须更改 display 方法才能打印出 HashSet 的元素。

【讨论】:

  • 那么我应该如何解决这个问题...我应该如何覆盖我的 equals 方法?
  • 覆盖 equals 方法在这里并没有真正的帮助。您将需要使用实际的数据结构来保存单词,并且仅在需要时将其转换为输出。如答案(我稍后添加)中详述的那样,合适的数据结构是HashMap,其中每个元素只能出现一次。
  • 如果我将值设为 HashSet,我将如何修改 add 方法
  • 仅当您编写我目前正在处理的代码时。相信我,你不想那样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
相关资源
最近更新 更多