Java中的地图中的重复条目

时间:2013-06-06 09:13:12

标签: java java-ee data-structures

我正在读一个json对象并将它们设置为HashMap中的键值对,到目前为止一切都很好。现在我遇到一个问题,我有一个特殊的密钥,它在json对象中重复但具有不同的值。

例如:

“id”:31231

“id”:33445

我现在需要这两个值。任何人都可以向我推荐最好的数据结构来存储这些数据。

6 个答案:

答案 0 :(得分:3)

您可以使用MultiMap或制作自己的Map<String,List<Value>

答案 1 :(得分:0)

是的,将Map值设为List并将两个值都添加到其中。它被称为多地图。

答案 2 :(得分:0)

使用multiMap Commons Collections 3.2.1 API

中提供的multiMap
       MultiMap multiMap = new MultiValueMap();
       multiMap.put("key", 12334);
       multiMap.put("key", 31231);
       multiMap.put("key", 12312);
       multiMap.put("key", 12312);
       System.out.println(multiMap);

{key = [12334,31231,12312,12312]}

答案 3 :(得分:0)

如果您不希望重复值针对同一个json对象,则可以定义Map<String,Set<Integer>>。否则,您可以像这样定义集合:Map<String,List<Integer>>。其中json对象是键,并且值是针对json对象设置的/整数值列表。 这就是你的代码逻辑应该是

的方式

在哈希映射中插入条目之前,请检查密钥是否已存在

  • 一个。如果key不存在,则创建一个新的set / list,将值添加到 se / list并将其插入密钥
  • 湾如果key存在,则根据键获取set / list并添加一个元素 集合

希望你能够编写代码。

答案 4 :(得分:0)

Guava library还包含Multimap接口以及各种实现。

答案 5 :(得分:0)

如果为密钥ID保留JSON数组而不是单个值,那会更好。这是您的JSON在实施上述建议后的样子:

{"ids": [{"id": "a"}, {"id": "b"}], "x": "c", "y": "d", ...  }

读取时只需获取ids键的值(JSON数组)并迭代它并从JSON数组中的JSON对象获取id。

我认为它应该可以解决你的问题。