【问题标题】:Is it possible to index the hashamaps, in an Arraylist?是否可以在 Arraylist 中索引哈希图?
【发布时间】:2019-02-13 10:11:05
【问题描述】:

是否可以在数组列表中索引 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}].

【问题讨论】:

  • 索引地图是什么意思?
  • 你想要的是一个配对列表?
  • 您正在向 ArrayList 中添加对同一 Map 的引用两次。如果要索引 2 个不同的 HashMap,则需要创建单独的对象。
  • 在 HashMap 中,键必须唯一,否则该值将被最后一个值替换

标签: java dictionary arraylist


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2010-12-01
    相关资源
    最近更新 更多