сервлет ArrayList и HashMap - PullRequest
       16

сервлет ArrayList и HashMap

1 голос
/ 06 января 2011
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> item = new HashMap<String, Object>();

data.clear();
item.clear();
int i = 0;
while (i < 5){
   item.put("id", i);
   i++;
   out.println("id: " + item.get("id"));
   out.println("--------------------------");
   data.add(item);
}
for(i=0 ; i<5 ; i++){
   out.println("print data[" + i + "]" + data.get(i));
}

Результат этого:

id: 0
--------------------------
id: 1
--------------------------
id: 2
--------------------------
id: 3
--------------------------
id: 4
--------------------------
печать данных [0] {id = 4}
печать данных [1] {id = 4}
печать данных [2] {id = 4}
печать данных [3] {id = 4}
печать данных [4] {id = 4}

Почему хранится только последний элемент?

Ответы [ 3 ]

2 голосов
/ 06 января 2011

Я думаю, вы спрашиваете, почему в вашем HashMap хранится только одно значение.Если это так:

Каждый раз, когда вы звоните Map.put("id", i), вы перезаписываете предыдущую пару ключ, значение, где ключ = "id".В структуре данных карты ключи уникальны.Поэтому у элемента есть только одна пара «ключ-значение».

Если вы спрашиваете, почему каждый элемент в вашем списке одинаков, как сказал Никита, вы каждый раз сохраняете один и тот же HashMap в свой список.

1 голос
/ 06 января 2011

Потому что вы постоянно меняете одну карту хешей. Попробуйте создать копию, когда добавите ее в список

data.add(new HashMap(item));
0 голосов
/ 22 августа 2015

Это происходит потому, что вы работаете только с экземпляром предмета.

Вы должны создавать экземпляр элемента в каждом цикле while, как это.

while (i < 5){
    item = new HashMap<String, Object>();
    item.put("id", i);
    i++;
    out.println("id: " + item.get("id"));
    out.println("--------------------------");
    data.add(item);
}
...