我有一个Map对象,我使用整数作为关键字,列表作为相应的值。这是我的代码。HashMap值不更新
Map<Integer, List<Double>> dataDouble = new HashMap<Integer, List<Double>>();
List<Double> dubList = new ArrayList<Double>();
for(double i = 0; i < 10; i++)
dubList.add(i);
dataDouble.put(1, dubList);
//dubList.clear();
for(int i = 10; i < 16; i++)
dubList.add(i);
dataDouble.put(2, dubList);
Set<Integer> keyset = dataDouble.keySet();
for(Integer key : keyset) {
System.out.println("\t\tKEY: " + key);
List<Double> finList = dataDouble.get(key);
for(double value : finList)
System.out.println("VALUE: " + value);
}
}
如果我不包括明确的说法则没有更新的第二个列表,和我在打印语句二月1日至10日的块。如果我添加了清除命令,则只在两个块中打印10-15。
我的问题是,为什么清除命令清除已经添加到地图中的数据,以及为什么向列表中添加新数据并将其放到地图上并不会实际更改值?
编辑:我知道我使用的双不是int,在我的实际项目中我处理的双重价值
列表是对象。你只创建一个'dubList'列表。无论你将它添加到'dataDouble'多少次,它都将是同一个对象,同一个列表。 –
因此,地图中的值并未实际设置,而只是指向对象本身? –
@PeytonC。正确的,因为它指向的是对象的引用,所以当你将它添加到列表中时,你只是将引用添加到名为'dubList'的ArrayList中,该对象中有0-15个元素,因为你从未初始化过一个新的'ArrayList '。 – Orin