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

时间:2018-07-19 18:33:57

标签: java list dictionary 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);

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

List<Integer> dimensions = hmap.get("A")

我期望哈希映射返回[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

1 个答案:

答案 0 :(得分: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