2010-01-22 59 views
4

什麼是更好的編程練習?更好地使用TreeMap或命令?

在sql中使用order by子句還是把結果放在java中的treemap vs hashmap中用於類似drop down的事情?

+3

如果您提供了關於您正在使用的代碼的一些詳細信息,則此問題會更清晰。請記住,我們無法訪問您腦子裏的一切。 – danben 2010-01-22 19:21:39

+3

鏈接的哈希映射沒有排序。它只保留輸入順序。你可能正在考慮一個Treemap。 – 2010-01-22 19:22:54

+0

這是正確的史蒂夫,我的意思是樹形圖。 – Shah 2010-01-22 19:30:50

回答

2

如果您正在考慮性能,那麼在數據庫結束時會對較大的結果集進行更好的排序,特別是在對您進行排序的列進行索引時。

對於較小的數據集性能差異可能並不重要,但我認爲在大多數情況下,SQL的Order By子句將是更簡單的方法。

順便說一句,如果您必須在使用它之前將已排序的數據存儲在地圖中,您仍然必須使用LinkedHashMap而不是普通的HashMap。因爲LinkedHashMap將保持數據的插入順序,而HashMap不會。

如果您希望數據在放入Map中時自動排序,那麼您將需要TreeMap或另一個排序的映射實現。

+0

如果您有合適的索引,數據庫可以按照需要的順序讀取記錄,而且根本沒有人需要對它們進行分類。根據查詢,數據庫可能需要對記錄進行排序,例如,做一個GROUP BY或UNION。無論如何,讓SQL進行排序確實更容易,所以如果沒有強大的性能增益,我會選擇更簡單的代碼。只要有可能,我就讓SQL做所有的準備工作和排序,以便調用程序可以一次一個地讀取記錄並處理它們,而不必將它們放入任何結構中。 – Jay 2010-01-27 18:06:16

0

很大程度上取決於實現,列表大小等。我會說,如果你可以在你的SQL查詢中做一個命令,那會把開銷推到數據庫上,而且你不需要進行排序在應用程序中。還要確保您在應用程序中使用的數據結構能夠保留順序,即不要將結果插入到散列表中。但是很大程度上取決於你想要實現的細節。

0

還取決於您正在嘗試執行「排序」的字段或使用它在Java代碼中進行隨意排序。但是在大多數情況下,我會依賴DB來完成訂單。

0

首先..

使用HashMap中會破壞任何試圖「ORDER BY」在你的SQL,因爲你不能保證取回你把項目的順序。所以如果你在你的SQL中使用'order by',你將被迫使用LinkedHashMap進行存儲來保留項目順序。

如果您設置了有效的比較器,TreeMap將爲您訂購。

我的偏好將基於列表和用法的大小。如果很多人每天都會訪問這個列表並刷新它,我寧願有他們自己的用戶界面來處理訂購。這部分取決於。

相關問題