散列非常有效率。使用哈希來搜尋、插入和刪除元素需要 O(1) 時間。在平衡良好的搜尋樹中,可以在 O(log n) 時間內找到一個元素。有沒有更有效的方法來搜尋容器中的元素?本章介紹一種稱為雜湊的技術。您可以使用雜湊來實作映射或集合,以在 O(1) 時間內搜尋、插入和刪除元素。
雜湊使用雜湊函數將鍵映射到索引。在介紹哈希之前,我們先回顧一下map,它是一種利用哈希實現的資料結構。回想一下,map(在本節中介紹)是儲存條目的容器物件。每個條目包含兩個部分:鍵和值。此鍵也稱為搜尋鍵,用於搜尋對應的值。例如,字典可以儲存在映射中,其中單字是鍵,單字的定義是值。
映射也稱為字典、雜湊表或關聯數組。
Java Collections Framework 定義了用於建模地圖的 java.util.Map 介面。三個具體實作分別是 java.util.HashMap、java.util.LinkedHashMap 和 java.util.TreeMap。 java.util.HashMap 使用雜湊實現,java.util.LinkedHashMap 使用LinkedList 實現,java.util.TreeMap 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色🎜> 使用紅色實現-黑樹。
如果你知道數組中某個元素的索引,則可以使用該索引在 O(1) 時間內檢索該元素。那麼這是否意味著我們可以將值儲存在數組中並使用鍵作為索引來查找值?答案是肯定的——如果您可以將鍵映射到索引。儲存值的陣列稱為雜湊表。將鍵對應到雜湊表中索引的函數稱為雜湊函數。如下圖所示,雜湊函數從鍵取得索引,並使用該索引檢索鍵的值。 雜湊是一種使用從鍵獲得的索引來檢索值而不執行搜尋的技術。
如何設計一個從鍵產生索引的雜湊函數?理想情況下,我們希望設計一個函數,將每個搜尋鍵對應到雜湊表中的不同索引。這樣的函數稱為完美雜湊函數。然而,很難找到完美的雜湊函數。當兩個或多個鍵映射到相同的雜湊值時,我們說發生了碰撞。儘管有多種方法可以處理衝突(本章稍後將對此進行討論),但最好先避免衝突。因此,您應該設計一個快速且易於計算的雜湊函數,以最大限度地減少衝突。
以上是散列的詳細內容。更多資訊請關注PHP中文網其他相關文章!