GeHashCode與雜湊演算法

2022-02-15 09:34:47 字數 1034 閱讀 3931

gehashcode三原則:

1. 如果兩個物件相等(由operator==定義),它們必須產生相同的雜湊碼。否則,這樣的雜湊碼不能用來查詢容器中的物件。

2. 對於任何乙個物件a,a.gethashcode()必須是乙個例項不變式(invariant)。即不管在a上呼叫什麼方法,a.gethashcode()都必須總是返回相同

的值。這可以確保放在「雜湊桶」中的物件總是位於正確的「雜湊桶」中。

3. 對於所有的輸入,雜湊函式應該在所有整數中產生乙個隨機的分布。這樣,我們才能從乙個雜湊容器上獲得效率的提公升。

object.gethashcode滿足原則1和原則2,在雜湊表(hashtable,dictionary)使用不會有問題

valuetype.gethashcode不100%滿足原則1,原則2,原則3,在雜湊表(hashtable,dictionary)使用可能會有問題

測試環境 .net framwwork2.0(沒有打sp補丁),vs2005

證明:1.如果兩個值型別實體既有值型別欄位也有引用型別欄位且第乙個欄位的gethashcode相等,則這兩個實體的雜湊碼相等

2.如果兩個值型別實體的僅有乙個欄位且那乙個字元的gethashcode相等,則這兩個實體的雜湊碼相等

3.如果兩個值型別實體的全都只包含整型,浮點型,或者列舉字段(不包含decimal,bool以及自定義結構型別)且所有欄位的gethashcode相等,則

這兩個實體的雜湊碼相等

4.如果兩個值型別實體的全都只包含引用型別欄位且第乙個欄位的gethashcode相等,則這兩個實體的雜湊碼相等

總結:假設有乙個結構體structtest

structtest有兩個例項 s1,s2

1.當乙個structtest包含多個字段,且每個欄位都是整型(char除外),浮點型,或者列舉。那麼當且僅當s1和s2的每個欄位的gethashcode相等,s1.gethashcode才與s2.gethashcode相等

2.否則如果s1和s2的第乙個欄位的gethashcode相等,s1.gethashcode與s2.gethashcode相等

雜湊演算法與加密演算法

那麼,首先要知道,什麼是雜湊 演算法 呢?產生一些資料片段 例如訊息或會話項 的雜湊值的演算法。例如,md5就是一種雜湊演算法。軟體開發中的雜湊函式或雜湊演算法,又稱雜湊函式,英語 hash function,是一種從任何一種資料中建立小的數字 指紋 的方法。所有雜湊函式都有如下乙個基本特性 如果兩...

雜湊演算法簡介與常見的雜湊生成演算法

常見的雜湊生成演算法 平方取中法 進製轉換法 取模法偽隨機數法 雜湊演算法的特點 雜湊演算法的應用 雜湊 hash 也被稱之為雜湊,是指將任意長度的輸入的資料按照某種規則 雜湊演算法 來變為定長的輸出的方式。這個輸出也被稱之為雜湊 雜湊 值。雜湊表 雜湊表 是一種根據關鍵碼值key來獲取資料的資料結...

雜湊表與雜湊演算法學習筆記

雜湊表 於陣列具有下標隨機訪問特性,理解這點非常重要。可以說雜湊表是由陣列進化來的。將輸入的鍵通過雜湊函式對映得出的value作為index去table中查詢,這便是雜湊的思想。graph lr a 鍵值key 雜湊函式 b 結果value 我們了解到為什麼雜湊表的查詢複雜度是o 1 因為key v...