我创建的<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