【问题标题】:servlet ArrayList and HashMapservlet ArrayList 和 HashMap
【发布时间】:2011-06-04 09:19:47
【问题描述】:
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));
}

结果是:

编号:0
--------------------------
编号:1
--------------------------
编号:2
--------------------------
编号:3
--------------------------
编号:4
--------------------------
打印数据[0]{id=4}
打印数据[1]{id=4}
打印数据[2]{id=4}
打印数据[3]{id=4}
打印数据[4]{id=4}

为什么只存储最后一个元素?

【问题讨论】:

    标签: java data-structures map hashmap


    【解决方案1】:

    我想您是在问为什么 HashMap 中只存储一个值。如果是这样的话:

    每次您调用Map.put("id", i) 时,您都会覆盖之前的键值对,其中key="id"。在地图数据结构中,键是唯一的。所以 item 只有一个 Key,Value 对。

    如果您问为什么列表中的每个元素都是相同的,正如 Nikita 所说,您每次都将完全相同的 HashMap 存储到您的列表中。

    【讨论】:

      【解决方案2】:

      因为您反复更改 one 哈希映射。将其添加到列表时尝试创建一个副本

      data.add(new HashMap(item));
      

      【讨论】:

        【解决方案3】:

        发生这种情况是因为您只使用了该项目的一个实例。

        您必须像这样在每个 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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 2017-08-14
          • 2014-03-30
          相关资源
          最近更新 更多