2012-01-19 42 views
3

如何排列列表中的日期?如何在列表中排序日期

我讀過這可以通過使用TreeMap來實現,因爲它是一個排序和可導航的地圖,它組織自平衡二叉樹中的元素。但它也很昂貴。

我的問題是 - 什麼是最好的和有效的方式來實現結果?

+0

在選擇BEST算法之前,您必須定義您的要求。你需要快速的執行時間嗎?你需要低內存開銷嗎?你需要快速檢索或插入元素? – unholysampler

回答

6

這取決於。如果你想擁有「始終排序」的容器,那麼TreeSet是你的朋友。向TreeMap添加另一個元素將是O(log(n)) - (非常好,比線性快)。

如果您只需要對它進行一次排序(稍後不添加元素),那麼只需將它放到ArrayList並使用sort()方法即可。這將是最佳 - O(N日誌(N))

更新:

正如JB Nizet在評論中提到,集(TreeSet的)不能包含重複。列表(ArrayList)可以。
如果性能很重要,並且存在很多元素,並且需要存儲允許重複的元素,那麼您可以將其存儲在TreeSet中,但需要實現計數(例如,add()將爲element.count++remove()將爲element.count--)。

+0

TreeMap是一個地圖。這不是一個集合。至少推薦使用TreeSet。但是List和Set不具有相同的行爲。一個接受重複,另一個不接受。這應該是主要的選擇因素。 –

+0

@JBNizet:完全同意。我的意思是TreeSet(它在TreeMap之上實現)。修正了我的帖子。謝謝。 –