2012-04-30 51 views
0

我需要採取ArrayList<Conference> conferences,其中Conference包含public Date beginDate參數,並按如下方式排序:首先,將單獨的會議分成代表beginDate的唯一月份的桶,以及然後在桶內排序beginDate本身。我相信這是一個普遍的需要,所以我希望這裏有人會有一些提示。用於將Java對象排序成桶的算法,然後在桶內排序

我的想法如下。請告訴我爲什麼這是次優:) :)

  1. 創建一個HashMap<Date, ArrayList<Conference>>
  2. 迭代conferences並使用特殊的靜態函數查找它們的beginDate的月份的第一天,檢查是否有ArrayList<Conference>用於該Date。然後將它們添加到ArrayListDate(它都應該是相同的,因爲first_day_of_month(any_day_in_month)是相同的。
  3. 遍歷HashMap的每個ArrayList構件和使用一個標準的排序過程按照日期到ArrayList排序。

這似乎不是必需的更復雜,但請讓我知道爲什麼它是壞的,什麼可以做修復它

編輯:另外,如果它很重要,我最終需要所有這些ArrayList的加回將會進入的ArrayAdapter commonsware's MergeAdapter ... :(

+0

我必須說我最終在一個完全無關的領域做了完全相同的事情。 'HashMap >>'。它工作得很好,即使每次添加新條目時都需要遍歷BigDecimal鍵,以確保我不會重複一個值。 – Sheriff

回答

3

如果按從一開始的日期排序,則該月的條目將隨後以任一方式排序。在初始排序後,如果條目是新月的第一個條目,則可以遍歷所有條目並進行人爲的「拆分」。我甚至不確定你需要做這樣的區分(可能因爲這個問題有點含糊)。

該算法的總複雜度爲O(nlog n),其中n是元素的數量,當然沒有更好的解決方案。

注意順便說一句這個算法比你提出的操作複雜性更好。

+0

我想我需要差異化,因爲我需要使用不同的適配器來添加到一個'MergeAdapter',它可以處理視圖和適配器的順序陣列...所以你說的是排序前面,然後當我找到第一個新月,將它添加到新的數組列表中? –

+0

@ jshin47是的,基本上就是這樣。只需用'找到每一個新月份'替換'第一個新月份'即可更準確。 –