2013-05-07 85 views
0

我用GregorianCalendar-Objects填充LinkedHashMap时遇到问题。使用GregorianCalendar填充地图

我创建了一个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

我找到了解决方案。问题是,那个时间是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); 
}