在循环中使用 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 覆盖了从 1
到 word
的连接,因为 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 中被忽略
我有一个简短的问题。因为我的问题,我很绝望。
我只想通过循环在我的地图中放置具有相同值的不同键。
我的 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 覆盖了从 1
到 word
的连接,因为 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 中被忽略