Почему мой вложенный hashmap устанавливает все значения в одно и то же? - PullRequest
0 голосов
/ 01 ноября 2010

Это мой первый набег на 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 ]

3 голосов
/ 01 ноября 2010

Вам необходимо переместить Map continentData = new HashMap(); внутри цикла for, чтобы на каждом проходе создавалась отдельная карта. Сейчас вы просто обновляете одну и ту же карту снова и снова.

1 голос
/ 01 ноября 2010

Вы используете один и тот же экземпляр continentData для всех карт. Вы должны создать новый Map для него в каждом цикле.

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