2011-04-15 61 views
1

我正在編寫一個調度程序,其中創建的事件標記爲日期。因此,通過選擇日期,將顯示所有標記爲日期的事件。我試圖用谷歌的TreeMultimap做到這一點,但我意識到並不是所有與選定日期相關的記錄都被返回。我想知道是否有任何已知問題使用日期作爲TreeMultimap的關鍵或純粹是我的代碼問題。在Java中使用日期作爲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

日期是否包含時間部分?你有沒有考慮到這一點? – BalusC 2011-04-15 02:19:25

+0

你不是在某處變更日期嗎?當Map/Multimap鍵更改時,一切都可能發生。避免可變對象作爲鍵幾乎總是一個好主意。 – maaartinus 2011-04-15 02:36:33

+0

@BalusC無論時間部分如何,我都想獲取日期的所有事件。因此,我只使用月份的年,月和日來從列表中檢索具有如下時間格式的事件20110509T120500 – max 2011-04-15 02:43:06

回答

1

如果一個可變對象被用作鍵並被修改,那麼該記錄將不再被找到,因爲該散列將不同。它將保留在舊的散列「bin」中,但散列映射實現將基於新的散列鍵在「bin」中搜索它,並且它不會在那裏(除非純粹的機會,這對於好的哈希碼實現)。