使用日期作为Java中TreeMultimap的键时记录丢失

时间:2011-04-15 02:16:27

标签: java

我正在编写一个调度程序,其中创建的事件标记为日期。因此,通过选择日期,将显示标记为日期的所有事件。我尝试使用谷歌的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);                  
            }

1 个答案:

答案 0 :(得分:1)

如果将可变对象用作键并且它被修改,则将不再找到该记录,因为哈希将是不同的。它将保留在旧的哈希“bin”中,但是哈希映射实现将基于新的哈希键在“bin”中搜索它,并且它不会在那里(除非纯粹的机会,这对于好的很小)哈希码实现)。