Java überschreibt Hashcode immer, wenn sie überschreiben
Kürzlich habe ich das Grundwissen von Java gelernt. Wenn ich auf Java begegne, die gleichermaßen gleichermaßen begegne, habe ich immer viele Fragen, wenn ich Hashcode überschreiben muss. Nachdem ich direkt mit meinen Kollegen besprochen und die Informationen online abfragt habe, werde ich sie hier sortieren, um jedem zu helfen, es zu verstehen, und es gibt Anweisungen im Code.
Spezifischer Implementierungscode:
Paket cn.xf.cp.ch02.Item9; Import Java.util.hashMap; Import Java.util.Map; öffentliche Klasse PhoneNumber {private endgültige KurzbereicheCode; privates kurzes kurzes Präfix; Private endgültige kurze Leinenzahl; public phoneNumber (int AreaCode, int prefix, int lineNumber) {rangecheck (aaRaCode, 999, "Vorwahl"); Rangecheck (Präfix, 999, "Präfix"); Rangecheck (Leinenumber, 9999, "Zeilennummer"); this.areacode = (kurz) AreaCode; this.prefix = (kurz) Präfix; this.linenumber = (kurz) Leinenzahl; } private static void rangecheck (int arg, int max, String name) {if (arg <0 || arg> max) werfen neue illegalArgumentException (name + ":" + arg); } @Override public boolean Equals (Objekt o) {if (o == this) return true; if (! (o Instanz der PhoneNumber)) return falsch; PhoneNumber Pn = (PhonNumber) o; return pn.linenumber == linenumber && pn.prefix == prefix && pn.areacode == AreaCode; } /* @Override // Wie für die Verwendung von 31 verwendet wird, ist dies der empfohlene Wert. Studien haben gezeigt, dass diese Zahl bei Verwendung public int hashcode () {int result = 17 besser funktioniert; Ergebnis = 31 * Ergebnis + AreaCode; Ergebnis = 31 * Ergebnis + Präfix; Ergebnis = 31 * Ergebnis + Leinenumberung; Rückgabeergebnis; } */// Wenn sich ein Objekt nicht häufig ändert und einen hohen Overhead hat, sollten Sie den Hash -Code -Cache innerhalb des Objekts in Betracht ziehen // Variablen, die mit flüchtigem geändert werden. Der Thread wird bei jeder Verwendung der Variablen den am meisten geänderten Wert der Variablen lesen. privates volatiles int Hashcode; @Override public int HashCode () {int result = HashCode; if (result == 0) {result = 17; Ergebnis = 31 * Ergebnis + AreaCode; Ergebnis = 31 * Ergebnis + Präfix; Ergebnis = 31 * Ergebnis + Leinenumberung; HashCode = Ergebnis; } Rückgabeergebnis; } public static void main (String [] args) {map <phoneNumber, String> m = new Hashmap <phoneNumber, String> (); M.put (New PhoneNumber (707, 867, 5309), "Jenny"); // Jenny wird nicht hierher zurückgegeben, es wird null zurückgegeben, da sie Objekte in verschiedene Hash -Buckets -Systeme einstellen. }}Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!