这是我第一次涉足java,我无法理解地图的工作原理。我有一个for循环,它将信息映射附加到另一个映射中。然而,当我查看最外面的地图时,它包含正确数量的子地图,但是它们都拥有相同的信息,即使我最初在其中放入了不同的信息......有谁知道为什么?
谢谢,
Lemiant
下面我已经包含了我的代码和System.out.print输出:
代码:
Map continents = new HashMap();
Map continentData = new HashMap();
int lastContinent = -1;
//Accumulate Continent data
for(Country currCountry : countries){
continentData.clear();
int currContinent = currCountry.getContinent();
continentData.put("P", 0);
continentData.put("E", 1);
continentData.put("O", 2);
continentData.put("Bonus",currContinent);
if(currContinent != lastContinent){
continents.put(currContinent, continentData);
System.out.println("add");
System.out.println(continentData);
}
lastContinent = currContinent;
}
System.out.println(continents.toString());
结果:
add
{E=1, P=0, O=2, Bonus=0}
add
{E=1, P=0, O=2, Bonus=1}
add
{E=1, P=0, O=2, Bonus=2}
add
{E=1, P=0, O=2, Bonus=3}
add
{E=1, P=0, O=2, Bonus=4}
add
{E=1, P=0, O=2, Bonus=5}
{0={E=1, P=0, O=2, Bonus=5}, 1={E=1, P=0, O=2, Bonus=5}, 2={E=1, P=0, O=2, Bonus=5}, 3={E=1, P=0, O=2, Bonus=5}, 4={E=1, P=0, O=2, Bonus=5}, 5={E=1, P=0, O=2, Bonus=5}}
答案 0 :(得分:3)
您需要在Map continentData = new HashMap();
循环内移动for
,以便在每次传递时创建单独的地图。现在你只是一遍又一遍地更新同一张地图。
答案 1 :(得分:1)
您正在为所有地图使用相同的continentData
实例。您必须在每个循环交互中为它实例化一个新的Map
。
for(Country currCountry : countries){
//continentData.clear();
Map continentData = new HashMap();
int currContinent = currCountry.getContinent();