2010-06-18 78 views
10

免責聲明:
這個問題並不是要爭辯!在Java中搜索鍵值對的最快和最有效的方法?

什麼是搜索鍵值對的最快和更少的內存耗盡方式?我會將項存儲在關鍵值之類的關係中,並且我需要快速訪問它們。我應該使用SQLite數據庫嗎?一張地圖?一個Hashtable?一個HashMap?請給出使用任何搜索方法的一些優點/缺點。

回答

11

只要密鑰的hash function有效,任何基於散列的Map結構都可以使用。您可以使用值ID:s作爲查找的結果以在搜索期間節省內存。

如果您的數據已經在數據庫中,那麼您可以將此搜索完全留給RDBMS,畢竟他們是爲這些東西做的。

7

如果你的數據在內存中,Map一般是你的朋友 - 他們是這個意思。但是,請不要使用Hashtable。它比新的Map實現慢得多。因爲它的方法是同步的,大部分時間是不需要的(在需要的時候,有一個更好的選擇 - 見下文)。

在單線程上下文中,HashMap可能會正常。

如果您需要線程安全,請使用ConcurrentHashMap

+0

在沒有任何鎖定的情況下,HashTable在單線程環境中不同步並且比ConcurrentHashMap快! 如果對地圖的訪問是多線程的,那麼ConcurrentHashMap確實是最好的解決方案。 – 2010-06-18 12:48:03

+0

@Tobias,「與新的集合實現不同,Hashtable是同步的」 - 來自http://java.sun.com/j2se/1.5.0/docs/api/java/util/Hashtable.html – 2010-06-18 13:03:45

+1

因爲我們正在談論關於語義......「ConcurrentHashMap'實現在幾乎所有情況下都比'HashMap'執行得更好,它還允許同時進行併發讀寫操作,並且它支持普通複合操作的方法,否則它們不是線程安全的。部署環境從'ConcurrentHashMap'開始。「 *清潔代碼 - 敏捷軟件工藝手冊,Robert C. Martin,第183頁* – Esko 2010-06-18 13:16:26

相關問題