Javaは、上書きが等しい場合は常にハッシュコードを上書きします
最近、私はJavaの基本的な知識を学びました。平等をカバーするJavaに遭遇したとき、ハッシュコードを上書きしなければならないときは常に多くの質問があります。同僚と直接話し合い、オンラインで情報を照会した後、ここで誰もがそれを理解できるように整理し、コードに指示があります。
特定の実装コード:
パッケージcn.xf.cp.ch02.item9; import java.util.hashmap; import java.util.map; public class phoneNumber {private final shortエリアコード;プライベートファイナルショートプレフィックス。プライベートファイナルショートリネ。 Public PhoneNumber(int AreaCode、int prefix、int linenumber){rangeCheck(エリアコード、999、 "局所コード"); RangeCheck(プレフィックス、999、 "prefix"); RangeCheck(LinEnumber、9999、 "Line Number"); this.AreaCode =(short)AreaCode; this.prefix =(short)prefix; this.lineNumber =(short)linenumber; } private static void rangeCheck(int arg、int max、string name){if(arg <0 || arg> max)throw new IllegalargumentException(name + ":" + arg); } @Override public boolean equals(object o){if(o == this)return true; if(!(o instanceof phoneNumber))falseを返します。 PhoneNumber pn =(PhoneNumber)o; pn.lineNumber == linenumber && pn.prefix == prefix && pn.areocode == earecode; } /* @Override // 31が使用される理由については、これが推奨値です。調査では、Public int hashcode(){int result = 17;結果= 31 *結果 +エリアコード。 result = 31 * result + prefix;結果= 31 * result + linenumber;返品結果; } *///オブジェクトが頻繁に変更されず、オーバーヘッドが高い場合、揮発性で変更されたオブジェクト//変数内のハッシュコードキャッシュを考慮する必要があります。スレッドは、変数を使用するたびに変数の最も変更された値を読み取ります。プライベート揮発性INTハッシュコード。 @Override public int hashcode(){int result = hashcode; if(result == 0){result = 17;結果= 31 *結果 +エリアコード。 result = 31 * result + prefix;結果= 31 * result + linenumber; HashCode = result; } return result; } public static void main(string [] args){map <phoneNumber、string> m = new Hashmap <PhoneNumber、String>(); M.Put(新しい電話(707、867、5309)、「ジェニー」); //ジェニーはここでは返されません、それは異なるハッシュバケツシステムにオブジェクトを配置するため、nullを返します。 }}読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!