GetHashCode注意點 轉

2021-09-05 22:56:14 字數 1753 閱讀 3165

gethashcode注意點:

gethashcode方法的預設實現不保證針對不同的物件返回唯一值。而且,.net framework 不保證gethashcode方法的預設實現以及它所返回的值在不同版本的 .net framework 中是相同的。因此,在進行雜湊運算時,該方法的預設實現不得用作唯一物件識別符號。

gethashcode方法可以由派生型別重寫。值型別必須重寫此方法,以提供適合該型別的雜湊函式和在雜湊表中提供有用的分布。為了獲得最佳結果,雜湊**必須基於例項欄位或屬性(而非靜態欄位或屬性)的值。

如果兩個物件的比較結果相等,則每個物件的gethashcode方法都必須返回同乙個值。但是,如果兩個物件的比較結果不相等,則這兩個物件的gethashcode方法不一定返回不同的值。

乙個物件的gethashcode方法必須總是返回同乙個雜湊**,但前提是沒有修改過物件狀態,物件狀態用來確定物件的 equals 方法的返回值。請注意,這僅適用於應用程式的當前執行,再次執行該應用程式時可能會返回另乙個雜湊**。

為了獲得最佳效能,雜湊函式必須為所有輸入生成隨機分布。

string

類提供的 gethashcode 方法的實現為相同的字串值返回相同的雜湊**。因此,如果兩個 string 物件表示相同的字串值,則它們返回相同的雜湊**。

例如:string str1 = "hello world";

string str2 = "hello world";

則str1.gethashcode() == str2.gethashcode().

重寫gethashcode的派生類還必須重寫 equals,以保證被視為相等的兩個物件具有相同的雜湊**;否則,hashtable 型別可能無法正常工作。

例如通過reflector檢視int型別的gethashcode的實現如下:

public 

override

intgethashcode()

又如下面的例子:

using system;

public class sometype {

public override int gethashcode() {

return 0;

public class anothertype {

public override int gethashcode() {

return 1;

public class lasttype {

public override int gethashcode() {

return 2;

public class myclass {

sometype a = new sometype();

anothertype b = new anothertype();

lasttype c = new lasttype();

public override int gethashcode () {

return a.gethashcode() ^ b.gethashcode() ^ c.gethashcode(); 0

0 0(請您對文章做出評價)

mysql 注意 mysql 注意點

mysql 優化 每個innodb 表都要有乙個主鍵 限制表上索引的數量,避免建立重複和冗餘索引 注意合理選擇復合索引鍵值的順序 優先選擇符合儲存需要的最小的資料型別 varchar n 中的n 代表的是字元數,而不是位元組數 使用utf8 儲存漢字 varchar 255 765 個位元組 過大的...

隨筆注意點

32位編譯器下,int占用2個位元組,long int 占用4個位元組,long long int 占用8個位元組 64位編譯器下,int占用4個位元組,long int 占用8個位元組,long long int 依然占用8個位元組 一 1,c程式需要有main函式 int main xcode3...

開發注意點

1.不要在mybatis的xml檔案裡map使用巢狀查詢,如 property inte ceinfo column inte ce code select selectbyinte cecode 可能會導致很嚴重的效能問題 2.定義固定的返回格式類 如 public class effect 3....