慕無(wú)忌1623718
2021-10-27 19:05:22
為 char 數(shù)組定義哈希碼方法的最佳方法。有沒(méi)有更好的方法來(lái)實(shí)現(xiàn)我們自己的 hascode() 方法來(lái)最小化沖突?char arr1[]={'a','b','c'};char arr2[]={'b','a','c'};char arr3[]={'c','a','b'};int hashcode() { int p=31; int n=arr1.length; int hash=1; for(int i=0;i<n;i++) { hash=31*hash+(int)arr1[i]; } return hash;}
2 回答

梵蒂岡之花
TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
這在很大程度上取決于您的數(shù)據(jù)通常如何彼此不同。
你可以編寫這個(gè)哈希碼函數(shù):
return arr.Length;
如果您的大多數(shù)數(shù)組具有不同的大小,它可能完全適合。
或者,如果您的數(shù)組通常具有完全不同的內(nèi)容,您可以使用前兩項(xiàng)。
注意:循環(huán)整個(gè)數(shù)組并執(zhí)行比與另一個(gè)數(shù)組的值進(jìn)行比較更復(fù)雜的事情是沒(méi)有意義的。為什么?因?yàn)楣4a僅用于性能優(yōu)化。所以它應(yīng)該比Equals
. 并Equals
比較所有值。
當(dāng)數(shù)組大小不同時(shí),Equals
不會(huì)循環(huán)。相反,它在比較后立即返回Length
。嘗試在哈希碼函數(shù)中擊敗它。
添加回答
舉報(bào)
0/150
提交
取消