【问题标题】:How to add additional value into an existing key in Hashmap?如何将附加值添加到 Hashmap 中的现有键中?
【发布时间】:2018-09-04 23:00:13
【问题描述】:

我有一个包含以下值的 HashMap:

HashMap<String, JSONObject> myMap = new HashMap<String, JSONObject>();
JSONObject name1 = new JSONObject();
name1.put("name", "A");
..... //so on for name2 and name3

myMap.put("1", name1);
myMap.put("2", name2);
myMap.put("3", name3);
System.out.println(myMap.get("1");

Output is {"name", "A"}.  

如何向现有键之一插入附加值,以便输出应如下所示:

System.out.println(myMap.get("1");

=> Expected output is {{"name", "A"}, {"age", "30"}}

【问题讨论】:

  • 执行map.get 抓取对象,修改它,然后put 将其返回到地图中。
  • @alfasin,如果没有替换实例,您不需要执行put。但是,如果 Map 的值类型是 String,则新的 String 实例需要为 put 才能覆盖现有值。
  • java编译器是否接受myMap.put("1",{Personal:[{"name":"A"}]});这个语法?
  • 我已更新代码以更清晰。但同样的问题仍然存在于我如何更新值而不覆盖现有值?
  • 您指定的json对象格式不正确 {{"name", "A"}, {"age", "30"}} 它应该是 [{"name":"A"} , {"age": "30"}] 或 { "name": "A" : "age" "30" },你到底需要什么?

标签: java hashmap


【解决方案1】:

两者都可以:

A) 创建一个普通的HashMap,其中值类型是一个容器(例如List);

HashMap<String, List<Object>> myMultiMap = new HashMap<>();
// Add a list with the objects you want
myMultiMap.put("name", [a list with elements])
// You can use the .compute method to add elements to existing lists

B) 创建一个Multi-Valued Map,JDK默认不提供,但可以在GuavaApache Commons等库中找到

【讨论】:

  • 感谢您的建议,但在我的场景中,附加元素是根据条件添加的。如果我使用 List 创建一个 HashMap,是否需要我需要一个元素列表?
  • 是的,您必须创建和管理该列表。使用该控件,您可以根据需要检查条件。如果您希望地图中的键具有多个值,则需要以某种方式拥有一个集合。这将由您或图书馆控制。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多