2011-10-01 118 views
3

我需要通過屬性查找對象。用hashmap索引對象列表是否是一種好的做法?

一種選擇是迭代對象數組並檢查屬性匹配的每個對象。

另一種選擇是將對象放在散列表中,並將屬性設置爲鍵。然後可以簡單地通過屬性檢索對象。

儘管事實上您複製了屬性數據,第二個選擇是否是最佳做法?

注意:該屬性被認爲是唯一的

+1

這取決於。你發現後如何使用這個物體?如果屬性永遠不會改變,這是一個好習慣。它可能不是如果你打算改變它。 – 2011-10-01 20:59:13

回答

6

是的!從你給出的觀點來看,使用Map通常會更好。在Map中查找值(其中密鑰具有良好的散列函數)是O(1)。在數組或列表中查找元素是O(n)

+2

有一點要記住的是,如果你有很多對象,那麼你的地圖將不得不每隔一段時間重建一次,這可能會很昂貴 – hvgotcodes

+2

@ hvgotcodes這仍然是攤銷O(1)。即使沒有,增長地圖仍然只有O(N)。 – Voo

+0

當然,它只是要注意的一點 – hvgotcodes

1

如果屬性是唯一的,並且有很多要搜索的對象,或者您需要搜索很多對象,那麼確定 - 創建一個索引。這往往是折衷 - 內存超速。

OTOH,如果沒有太多的物體,或者你沒有做太多的事情,它可能無論如何都不重要。

相關問題