Java는 덮어 쓰기가 동일 할 때 항상 해시 코드를 덮어 씁니다
최근에 나는 Java의 기본 지식을 배웠습니다. java 커버를 동등하게 만나면 해시 코드를 덮어 쓰야 할 때 항상 많은 질문이 있습니다. 동료들과 직접 논의하고 온라인으로 정보를 쿼리 한 후 모든 사람들이 그것을 이해하고 코드에 지침이 있습니다.
특정 구현 코드 :
패키지 cn.xf.cp.ch02.item9; import java.util.hashmap; import java.util.map; public class phoneNumber {private final Short AreaCode; 개인 최종 짧은 접두사; 개인 최종 단편 Linenumber; public phoneNumber (int areaCode, int prefix, int linenumber) {rangeCheck (AreaCode, 999, "Area Code"); RangeCheck (Prefix, 999, "Prefix"); RangeCheck (LineNumber, 9999, "줄 번호"); this.areacode = (짧은) 면적 통신; this.prefix = (짧은) 접두사; this.lineNumber = (짧은) lineNumber; } private static void rangecheck (int arg, int max, string name) {if (arg <0 || arg> max) 새로운 불법 불법 행정 exception (name + ":" + arg); } @override public boolean equals (Object o) {if (o == this) true를 반환합니다. if (! (o instance of phoneNumber)) false를 반환합니다. PhoneNumber pn = (phoneNumber) o; pn.lineNumber == lineNumber && pn.prefix == prefix && pn.areacode == areaCode; } /* @override // 31이 사용되는 이유는 권장 값입니다. 연구는이 숫자가 공개 int hashcode () {int result = 17; 결과 = 31 * 결과 + 면적 코드; 결과 = 31 * 결과 + 접두사; 결과 = 31 * 결과 + lineNumber; 반환 결과; } */// 객체가 자주 변경되지 않고 오버 헤드가 높은 경우 객체 내부의 해시 코드 캐시를 고려해야합니다. // 휘발성으로 수정 된 변수는 변수를 사용할 때마다 변수의 가장 수정 된 값을 읽습니다. 개인 휘발성 int 해시 코드; @override public int hashcode () {int result = hashcode; if (result == 0) {result = 17; 결과 = 31 * 결과 + 면적 코드; 결과 = 31 * 결과 + 접두사; 결과 = 31 * 결과 + lineNumber; 해시 코드 = 결과; } 반환 결과; } public static void main (String [] args) {map <phoneNumber, String> m = new Hashmap <phoneNumber, String> (); M.put (New PhoneNumber (707, 867, 5309), "Jenny"); // Jenny는 여기서 반환되지 않으며, 다른 해시 버킷 시스템에 객체를 넣기 때문에 NULL을 반환합니다. }}읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!