最近需要将两个list 的值给转化成hashMap 存到List 中,原先设计代码如下
public List<HashMap<String, String>> getT(List<E> h, List<E> r, String t) {
List<HashMap<String, String>> table = new ArrayList<HashMap<String, String>>();
Map<String, String> row = new HashMap<>();
for (E r1 : r) {
List<E> tList = r1.getList(t);
for (int i = 0; i < tList.size(); i++)
row.put(h.get(i).getText(), tList.get(i).getText());
table.add((HashMap<String, String>) row);
}
return table;
}
想要[{a=1,b=2},{a=2,b=3}],却只得到[{a=2,b=3},{a=2,b=3}],Debug时发现table[0]正常存放,当外层for循环第二次时,里层的for循环中put的更改会导致table[0]更改,即使这些数据是要存到table[1]的。
开始不明白为什么第二个map会导致list中第一个map的值更改,后来想应该和内存引用有关,将row的初始化放到外层for循环体内可以解决问题。
Map<String, String> row = new HashMap<>