8.3 方法實現的小建議
1. 把某個非0常數,比如17.儲存在乙個較results的變數中
2. 對於物件的每乙個域做一下操作 計算雜湊碼 c
2.1 boolean ---> c = f?0:1
2.2 byte char short int -- > (int)f;
2.3 long 型別 --> (int)(f^f >>> 32);
2.4 float 型別 -- > float.floattointbits()轉化為int
2.5 double 型別 -- > double.doubletolongbits() 轉化為int
2.6 物件的引用,那麼直接呼叫物件的hashcode()方法,具體在物件中自己實現。如果物件為null 那麼就設定為0
2.7 陣列,把陣列中的每乙個值作為單獨的域來處理。遞迴的引用上面的規則。
3. 按照下面的公式來套用2中計算得到的 c
result = result*37 +c ; //選擇37是因為37是乙個素數
下列就是按照上面的規則進行的計算
@override
public int hashcode()
4.若是計算的hashcode非常複製,計算代價太大,那麼可以將它放到系統快取中。
private volatile static int hashcode = 0; //這樣是作為乙個快取,並做lazy-initialized
@override
public int hashcode()
return hashcode;
}第九條:總是要改寫tostring()
建議一定要改寫該方法。
最好是指定一種格式來來覆蓋該方法,可以的話提供乙個公開靜態的方法來解析tostring後的方法。
第十條:謹慎的改寫clone()方法
首先需要實現cloneanle介面,標示該類是允許clone的
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...
Effective Java 學習筆記(5)
盡量復用物件,而不是建立新的物件,特別是當乙個物件是immutable 不可改變 的時候。如string物件,string s new string string 千萬不要這樣做,因為這裡實際上建立了兩個物件。要避免出現這樣的情況,1是可以用靜態工廠函式,來解決,如類庫中的boolean.value...
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...