如何将数组列表中的特定值添加到哈希映射?

Sar*_*rah 1 java dictionary list arraylist hashmap

这是我尝试过的:

HashMap<String, List<Integer>> hmap = new HashMap<String, List<Integer>>();
List<Integer> valueList = new ArrayList<Integer>();

valueList.add(9);
valueList.add(8);
valueList.add(7);
valueList.add(6);
hmap.put("A", valueList);


valueList.add(5);
valueList.add(4);
valueList.add(3);
valueList.add(2);
hmap.put("B", valueList);


valueList.add(7);
valueList.add(6);
valueList.add(5);
 valueList.add(4);
hmap.put("C", valueList);


valueList.add(2);
valueList.add(3);
valueList.add(4);
valueList.add(5);
hmap.put("D", valueList);
Run Code Online (Sandbox Code Playgroud)

当我尝试hmap通过执行以下操作来检索特定键的值时:

List<Integer> dimensions = hmap.get("A")
Run Code Online (Sandbox Code Playgroud)

我期待哈希映射返回,[9,8,7,6]但它返回ArrayList中的所有内容,即[9,8,7,6,5,4,3,2,7,6,5,4,2,3,4,5].如何使数组列表仅将第一个值推送到该键中HashMap?我错过了什么?

我也试过valueList.clear()每个之后hmap.put() statement.这导致只推送最后一组值,即,[2,3,4,5]对于所有键 HashMap.

Nik*_*las 5

之所以发生这种情况,是因为您valueList一次又一次地使用相同的内容,不断更新值.

为每个地图条目添加一个新的分隔列表.

 // ...
 valueList.add(6);
 hmap.put("A", valueList);

 valueList = new ArrayList<Integer>();
 valueList.add(5);
 // ...
 valueList.add(2);
 hmap.put("B", valueList);

 valueList = new ArrayList<Integer>();
 valueList.add(7);
 // ... etc
Run Code Online (Sandbox Code Playgroud)