我有一个哈希映射,其中包含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
我该怎么办呢?
感谢
答案 0 :(得分:1)
HashMap
(实际上,所有实现Map
的类)只为每个键存储一个值。
引用Map
的Javadoc:
将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。
要为每个键存储“多个”值,您需要一个能够存储多个值的值类型,例如:一个Collection
,例如List
或Set
,因此您的地图类型可能是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
,它更像你直接描述的那样。