这是我尝试过的:
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
。
答案 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