问题描述
是否可以在arraylist中索引hashmaps。
List<Map<String,String>> list_str=new ArrayList<Map<String,String>>();
Map<String,String> map_str=new HashMap<String,String>();
map_str.put("Name", "rrrrr");
map_str.put("Age", "23");
list_str.add(map_str);
System.out.println(list_str);
map_str.put("Name", "aaaa");
map_str.put("Age", "32");
list_str.add(map_str);
System.out.println(list_str);
对于上述代码,我得到的输出为
[{Age=32,Name=aaaa},{Age=32,Name=aaaa}].
但是,我希望输出为
[{Age=23,Name=rrrr},{Age=32,Name=aaaa}].
1楼
这是预期的行为。
当您以任何集合类型添加对象时,集合将仅保存该对象的引用。 它不会创建新对象并将其打孔。
因此,在您的情况下,您已经创建了HashMap
对象,并再次使用了该对象。
这就是为什么数据被覆盖的原因。
大概代码应该像这样:
List<Map<String,String>> list_str=new ArrayList<Map<String,String>>();
Map<String,String> map_str=new HashMap<String,String>();
map_str.put("Name", "rrrrr");
map_str.put("Age", "23");
list_str.add(map_str);
System.out.println(list_str);
map_str = new HashMap<String,String>();
map_str.put("Name", "aaaa");
map_str.put("Age", "32");
list_str.add(map_str);
System.out.println(list_str);
2楼
您将所有条目放入同一地图,并将其两次添加到列表中。 您需要为每个条目创建一个新的HashMap:
List<Map<String,String>> list_str = new ArrayList<Map<String,String>>();
Map<String,String> map_str_1 = new HashMap<String,String>();
map_str_1.put("Name", "rrrrr");
map_str_1.put("Age", "23");
list_str.add(map_str_1);
Map<String,String> map_str_2 = new HashMap<String,String>();
map_str_2.put("Name", "aaaa");
map_str_2.put("Age", "32");
list_str.add(map_str_2);
System.out.println(list_str);