如何在hashmap中打印多个键的值?

时间:2016-02-08 10:18:17

标签: java dictionary hashmap

我有一个哈希映射,其中包含k,v如下:

HashMap<String, String> total=new HashMap<>();

这就是我如何填充地图:(在db表的某些结果的for循环中)

total.put(rs.getString("id"), rs.getString("name"));

现在,有些键有多个值,我想为每个键打印:键和值。所以它看起来像这样:

123   john

123   tom

123   jack

234   terry

234   jeniffer

345   jacob

555   sara

我该怎么办呢?

感谢

1 个答案:

答案 0 :(得分:1)

HashMap(实际上,所有实现Map的类)只为每个键存储一个值。

引用Map的Javadoc:

  

将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。

要为每个键存储“多个”值,您需要一个能够存储多个值的值类型,例如:一个Collection,例如ListSet,因此您的地图类型可能是Map<String, List<String>>

管理有点笨拙:你基本上必须检查是否已经有一个与密钥相关联的集合,如果没有,则添加一个空集合,然后添加到集合中:

// Instead of:
map.put(key, value);

// ...you'd need something like:
if (!map.containsKey(key)) {
  map.put(key, new ArrayList<String>());
}
map.get(key).add(value);

或者,像Guava这样的库提供Multimap,它更像你直接描述的那样。