在循环中使用 Map.put(String, Integer)

Using Map.put(String, Integer) in a loop

我有一个简短的问题。因为我的问题,我很绝望。 我只想通过循环在我的地图中放置具有相同值的不同键。 我的 main 多次执行函数 einfuegen() 。如以下代码块:

Woerterbuch woerterbuch2 = new Woerterbuch2();
for (Medium m : medienliste) {
    for (String s : m.getWorte()) {
        woerterbuch2.einfuegen(s);
    }
}

顺便说一句,我已经测试了变量的所有循环和赋值。

现在 einfuegen() 应该将所有字符串 s 放入地图中。请参阅以下代码块:

public class Woerterbuch2 implements Woerterbuch{

    HashMap<String, Integer> liste = new HashMap<>();

    public void einfuegen(String word) {
        // I have deleted all the previous unimportant code
        liste.put(word, 1);
    }
}

我的地图只包含一个条目,尽管函数 einfuegen() 不止一次是 运行 并且分配给 word 的不同字符串不止一个。 正常情况下我的map应该包含50多个不同的词,因为einfuegen()执行了50多次

我的假设是 Java 覆盖了从 1word 的连接,因为 1 始终是 Integer 的同一个实例。 如果我是对的,我仍然不知道如何解决它。

感谢您的帮助。 好期待=)

您总是在 einfuegen 中创建地图。这就是问题。将 Map liste 声明为实例变量。

示例:

Class X{

private Map<String, Integer> liste = new HashMap<>();


Woerterbuch woerterbuch2 = new Woerterbuch2();
for (Medium m : medienliste) {
    for (String s : m.getWorte()) {
        woerterbuch2.einfuegen(s);
    }
}

public void einfuegen(String word) {
    // I have deleted all the previous unimportant code

    liste.put(word, 1);
}
}

如果您的所有密钥都具有恒定值并不重要。但是,如果您给出常量 key.In 情况,那么所有键都相同,这很重要。将进行一次输入。调试您的代码以确保键是唯一的。

1) 打印 m.getWorte() 中的值以检查发送的所有密钥是否唯一。

查看示例代码

HashMap<String, Integer> myMap = new HashMap<>();
        myMap.put("s", 1);
        myMap.put("r", 1);
        myMap.put("m", 1);
        System.out.println(myMap); // This prints {r=1, s=1, m=1}

HashMap<String, Integer> myMap1 = new HashMap<>();
    myMap1.put("s", 1);
    myMap1.put("s", 2);
    myMap1.put("s", 3);
    System.out.println(myMap1); // This prints {s=3}

即无论值是常量,都会在 hashmap 中创建条目,如果键相同,无论值如何,条目都会在 hashmap 中被忽略