是否可以在Arraylist中索引哈希集?

时间:2019-02-13 10:11:05

标签: java dictionary arraylist

是否可以在数组列表中索引哈希图。

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}].

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您要将所有条目放入同一地图,并将其两次添加到列表中。您需要为每个条目创建一个新的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);