为什么我的嵌套hashmap将所有值设置为相同的值?

时间:2010-11-01 00:10:04

标签: java map for-loop hashmap nested

这是我第一次涉足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}}

2 个答案:

答案 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();