我創建的<GregorianCalendar, Integer>
一個TreeMap
儲存在GPS閏秒引入日期:TreeMap的
leapSecondsDict = new TreeMap<GregorianCalendar, Integer>();
GregorianCalendar calendar =
new GregorianCalendar(TimeZone.getTimeZone("UTC"));
calendar.set(1981, GregorianCalendar.JUNE, 30, 23, 59, 59);
leapSecondsDict.put(calendar, 1);
calendar.set(1982, GregorianCalendar.JUNE, 30, 23, 59, 59);
leapSecondsDict.put(calendar, 2);
calendar.set(1983, GregorianCalendar.JUNE, 30, 23, 59, 59);
leapSecondsDict.put(calendar, 3);
的問題是,每一個我稱之爲放一次,TreeMap
只包含最後一個插入的元素,並且尺寸保持爲1.
這是爲什麼發生? 我的猜測是,當使用Calendar
作爲關鍵字時,關鍵是類實例id而不是它的值,所以當將第二個元素插入TreeMap
時,我將用同一個關鍵字更新現有條目,即使該關鍵字現在是具有不同價值的同一班。
我的假設是對的還是有其他原因?除了爲每個條目創建新的Calendar
以外,還有其他更實用的方法嗎?
的'set'方法不創建一個新的'Calendar',它仍然是相同的,但用不同的值。因此,當你將它添加到Map中時,它只是將它的值更新爲同一個鍵,你總是引用同一個對象。您需要爲每個鍵創建一個新實例。 – Balduz
@Balduz感謝您的澄清。你會回答,所以我可以接受嗎? –
完成,並感謝。 – Balduz