for(HashMap<String, ?> info:list){
HashMap<String, Object> infoq = new HashMap<String, Object>();
System.out.println("info name:"+info.get("name"));
for(StudentVirtual virtual:virtuals){
String DataIndex = virtual.getDataIndex();
infoq.put(DataIndex, info.get(DataIndex));
infoq.put(DataIndex+"_header", virtual.getHeader());
infoq.put(DataIndex+"_width", virtual.getWidth());
infoq.put(DataIndex+"_flex", virtual.isFlex());
}
System.out.println("list2 add:"+infoq.get("name"));
list2.add(infoq);
}
如果把
HashMap<String, Object> infoq = new HashMap<String, Object>();
放到循环外面,则list2中的内容完全一样
因为在放在for循环之前只是指定了一个内存地址,每次都在一个内存地址上覆盖原来的数据,所以你得到的永远是循环最后一次的值。 放在循环里是每循环一次就NEW一个内存地址,这样把数据放到各自的内存地址里,互不影响。