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

时间:2016-12-20 16:47:32

标签: java loops hashmap instance put

我有一个简短的问题。因为我的问题,我很绝望。 我只是想通过使用循环在我的Map中使用相同的值来放置不同的键。 我的主要执行函数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。 通常我的地图应包含50多个不同的单词,因为einfuegen()的执行次数超过50次。

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

感谢您的帮助。 我真的很期待它=)

2 个答案:

答案 0 :(得分:1)

您总是在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);
}
}

答案 1 :(得分:0)

如果您的所有钥匙都有超值,则无关紧要。但是如果你给的是常量密钥则很重要。如果所有密钥都相同,则会生成一个条目。调试代码以确保密钥是唯一的。

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中忽略条目