当前位置: 首页 > 知识库问答 >
问题:

循环hashmap,将同一个键的值分组为对

都阳
2023-03-14

我一直在努力想办法创建一个HashMap,将具有相同键的值(放入列表)分组。这就是我的意思:

假设我有以下键和值:

Value     Key  *Sorry I got the columns swapped
1         10 
1         11 
1         12 
2         20 
3         30 
3         31 

我想把这些值放到一个

Hashmap <Integer, List<Integer>>

这样它就会将值分组到具有相同键的列表整数中,类似于这样:

(1, {10, 11, 12}),(2, {20}), (3, {30,31})

现在,密钥和值存储在

Hashmap <Integer, Integer>

我不知道如何通过这个Hashmap循环创建新的Hashmap,关键是:值对列表。有人对这个话题有好的方法吗?

共有3个答案

燕鸿波
2023-03-14

HashMap只为每个整数存储1个值。因此,对其进行迭代只会得到以下值:

Key      Value 
1         12 
2         20 
3         31 

迭代地图的内容,可以使用entrySet()方法:

for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

要构建列表地图,我建议您这样做:

List<Integer> list = map.get(key);
if(list == null) {
    list = new ArrayList<Integer>();
    map.put(key, list);
}
list.add(value);
傅和璧
2023-03-14

不要使用普通的地图使用谷歌番石榴的多地图

多重映射是一种

...将键映射到值的集合,类似于Map,但其中每个键可能与多个值相关联。

当然,这个概念也在其他图书馆得到了实施,番石榴只是我个人的喜好。

步建茗
2023-03-14

假设您创建了一个HashMap

public void addToMap(HashMap<Integer, List<Integer>> map, Integer key, Integer value){
  if(!map.containsKey(key)){
    map.put(key, new ArrayList<>());
  }
  map.get(key).add(value);
}

将此方法用于示例数据:

HashMap<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
addToMap(map, 1, 10); 
addToMap(map, 1, 11);
addToMap(map, 2, 20);
addToMap(map, 3, 30);
addToMap(map, 3, 31);

 类似资料: