【问题标题】:Why is my nested hashmap setting all the values to the same thing?为什么我的嵌套哈希图将所有值设置为相同的值?
【发布时间】:2011-05-03 05:26:31
【问题描述】:

这是我第一次涉足 Java,我无法理解地图的工作原理。我有一个 for 循环,它将信息地图附加到另一个地图中。但是,当我查看最外面的地图时,它包含正确数量的子地图,但是它们都包含相同的信息,即使我最初在其中放置了不同的信息……有人知道为什么吗?

谢谢,

勒芒

下面我包含了我的代码和 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}}

【问题讨论】:

    标签: java map for-loop hashmap nested


    【解决方案1】:

    您需要将Map continentData = new HashMap(); 移动到您的for 循环中,以便在每次通过时创建单独的地图。现在你只是一遍又一遍地更新同一张地图。

    【讨论】:

      【解决方案2】:

      您对所有地图都使用相同的continentData 实例。您必须在每个循环交互中为其实例化一个新的Map

      for(Country currCountry : countries){
          //continentData.clear();
          Map continentData = new HashMap();
          int currContinent = currCountry.getContinent();
      

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 2021-11-24
        • 2015-07-11
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        相关资源
        最近更新 更多