我正在编写一个调度程序,其中创建的事件标记为日期。因此,通过选择日期,将显示标记为日期的所有事件。我尝试使用谷歌的TreeMultimap做这个,但我意识到并不是所有与所选日期相关的记录都会被返回。我想知道是否有任何已知问题使用日期作为TreeMultimap的关键或纯粹是我的代码问题。
TreeMultimap<Date, EventInstance> dateToEventMultimap = TreeMultimap.create();
// Build multimap.
Calendar cal1 = GregorianCalendar.getInstance();
Calendar cal2 = GregorianCalendar.getInstance();
cal1.clear(); // Clears the values of all the time fields.
cal2.clear();
for (EventInstance eventInstance : myEventList) {
cal1.setTime(eventInstance.getTimeDate());
cal2.set(cal1.get(Calendar.YEAR),
cal1.get(Calendar.MONTH),
cal1.get(Calendar.DAY_OF_MONTH));
dateToEventMultimap.put(cal2.getTime(), eventInstance);
}
答案 0 :(得分:1)
如果将可变对象用作键并且它被修改,则将不再找到该记录,因为哈希将是不同的。它将保留在旧的哈希“bin”中,但是哈希映射实现将基于新的哈希键在“bin”中搜索它,并且它不会在那里(除非纯粹的机会,这对于好的很小)哈希码实现)。