我在使用GregorianCalendar-Objects填充LinkedHashMap时遇到问题。
我创建了一个GregorianCalendar开始时间。然后我将它填入ArrayList并添加200毫秒50次。之后,我将这些值与另一个ArrayList中的double一起填充到Map中。当我从地图中创建一个系统时,它只给出了时间列表的最后一个值,但是给出了双列表中的所有值。
starttime = new GregorianCalendar(2013, 0, 1, 13, 0, 0);
starttime.set(Calendar.MILLISECOND, 0);
GregorianCalendar time = new GregorianCalendar();
time.setTimeInMillis(starttime.getTimeInMillis());
for (int i = 0; i < 50; i++) {
time.add(Calendar.MILLISECOND, 200);
timeList.add(time.getTimeInMillis());
}
for (int i = 0; i < 50; i++) {
time.setTimeInMillis(timeList.get(i));
inputMap.put(time, valueList.get(i));
}
for (Entry<GregorianCalendar, Double> entry : inputMap.entrySet()) {
System.out.println(entry.getKey().getTime().toString()+" "
+entry.getKey().get(Calendar.MILLISECOND)+ " = " + entry.getValue());
}
答案 0 :(得分:0)
我找到了解决方案。问题是,该时间是inputMap中的引用。所以你必须在填充循环中创建一个新的GregorianCalendar。
for (int i = 0; i < 50; i++) {
GregorianCalendar gregCal = new GregorianCalendar();
gregCal.setTimeInMillis(starttime.getTimeInMillis());
inputMap.put(gregCal, valueList.get(i));
starttime.add(Calendar.MILLISECOND, 200);
}