Java 中的雜湊函數是作為一種以整數形式定義和傳回物件值的解決方案而建立的,作為雜湊函數輸出而獲得的回傳值稱為雜湊值。每個雜湊函數都會傳回一個 4 位元組的整數作為物件的回傳值。任兩個相同類型的物件將具有相同的整數值作為雜湊函數的輸出,同樣,不同的物件將具有不同的雜湊值。無法從哈希值推導出對象,這使得哈希函數成為不可逆函數。
什麼是雜湊函數?
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
雜湊函數可以定義為傳回與物件對應的整數值的函數。雜湊函數始終為同一物件傳回相同的整數值。哈希函數傳回的整數值稱為哈希值。以下是有關雜湊函數的要點:
以下是雜湊函數的常見應用:
幾乎每種程式語言都包含基於雜湊的資料結構。例如,java包含基於Hash函數的Hash表、Hash Map、Hash Set、Tree Set資料結構。這些資料結構是鍵值設計,其中每個鍵都是唯一的,而多個鍵可以存在相同的值。
此演算法用於資料完整性檢查。此演算法將任意長度的消息作為輸入,並產生固定長度(128 位元)的資料作為輸出。訊息摘要演算法的範例包括 MD2、MD4、MD5 和 MD6。
此演算法用於資料安全,並用於安全通訊端層 (SSL) 等應用程式和協定中。 SHA-0、SHA-1、SHA-2 和 SHA-3 是安全雜湊演算法的常見類別。
讓我們考慮一個登入場景,其中當輸入密碼來驗證使用者身分時,會計算輸入密碼的雜湊值,並透過網路傳送到儲存原始密碼雜湊值的伺服器。這樣做是為了確保當密碼從客戶端發送到伺服器時不會進行嗅探。
由於程式語言中使用不同的關鍵字,為了區分這些關鍵字和標識符,編譯器使用透過雜湊表實現的雜湊集來儲存所有這些關鍵字和標識符。
它是一種搜尋演算法,利用雜湊來搜尋給定字串中的一個或多個模式。它是最常用的演算法之一。
這些介麵包含用於一次比較兩個物件的函數。這些函數的傳回值可能是負數、零或正數,這取決於給定物件是小於、等於還是大於我們要比較的物件。內部比較器和可比較介面使用雜湊函數來相互比較物件。
優先權佇列與遵循 FIFO(先進先出)順序的普通佇列不同。在優先權佇列中,元素根據其優先權按自訂順序排列,這是使用基於雜湊函數的可比較和比較器內部實現的。
以下是建立雜湊函數的一些一般設計原則:
public int hashCode (){ //Logic goes here }
當兩個或多個物件傳回相同的雜湊值時,就會發生雜湊衝突。讓我們舉一個以鍵值對形式儲存資料的 java 雜湊映射的例子。當我們將物件放入雜湊映射時,會計算鍵的雜湊值,並根據該雜湊值找到儲存值物件的桶位置。具有不同哈希值的物件必須放入不同的桶中。當兩個或多個物件具有相同的雜湊值時,它們會使用稱為鍊錶的附加資料結構儲存在同一儲存桶位置中。所有具有相同哈希值的物件都使用鍊錶連結在一起。這種機制稱為連結。以下是雜湊函數處理衝突的方法:
以下是哈希的優點:
除了優點之外,雜湊也有一些限制:
以上是Java 中的雜湊函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!