【问题标题】:HashMap with multiple Value [duplicate]具有多个值的HashMap [重复]
【发布时间】:2014-11-13 01:56:56
【问题描述】:

我想在java中实现具有多个值的哈希表,即

// if sample is a hashmap
sample.put(1,1);
sample.put(1,2);

sample.get(1); 将返回 2 个值。

我怎样才能做到这一点?

【问题讨论】:

  • 您需要将“值”设为列表。
  • 使值成为Collection的子类,例如ArrayList。您上面的代码不会累积 1 和 2,而是将 1 替换为 2。

标签: java multimap


【解决方案1】:

您可以改用 Multimap。它为列表中的键保留多个值。在commons-collectionsGuava 中有实现。

Multimap<String, String> multimap = ArrayListMultimap.create();   
multimap.put("ducks", "Huey");
multimap.put("ducks", "Dewey");
multimap.put("ducks", "Louie");
Collection<String> ducks = multimap.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]

这类似于使用值是列表的 Hashmap,但您不必显式创建列表。

以自己动手的方式完成的相同示例如下所示:

Map<String, List<String>> map = new HashMap<>();
map.put("ducks", new ArrayList<String>());
map.get("ducks").add("Huey");
map.get("ducks").add("Dewey");
map.get("ducks").add("Louie");
// or as an alternative to the prev 4 lines:
// map.put("ducks", new ArrayList<String>(
//     new String[] {"Huey", "Dewey", "Louie"}));
Collection<String> ducks = map.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]

请注意,您可以将 Multimap 用作构建器并在其上调用 asMap 以返回地图。

【讨论】:

  • @Unihedron:是的,这行得通。添加作为替代方案,谢谢
  • 感谢您提及Multimap。直到 :)
【解决方案2】:

这样做

Map<String, List> map = new HashMap<String, List>();
List listOne = new ArrayList();
for(int i=0;i<4;i++){
    listOne.add(i);
}
List listTwo = new ArrayList();
for(int i=4;i<6;i++){
    listTwo.add(i);
}
map.put("listOne",listOne);
map.put("listTwo",listTwo);

或者你甚至可以使用 Guava 的 Multimap

【讨论】:

    【解决方案3】:

    试试HashMap&lt;Key, List&lt;Value&gt;&gt; 您需要管理列表,如果它不存在则创建,如果需要则添加。

    Guava 还提供了Multimap 实现

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2021-06-22
      • 2012-09-26
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多