Nachdem ich gelernt hatte, worum es geht, dachte ich, eine hoffentlich einfachere Erklärung in Analogie zu schreiben:
Zusammenfassung: Was ist ein Hashcode?
- Es ist ein Fingerabdruck. Mit diesem Fingerabdruck können wir interessierende Personen identifizieren.
Lesen Sie unten für weitere Details:
Stellen Sie sich einen Hashcode vor, während wir versuchen, jemanden eindeutig zu identifizieren
Ich bin ein Detektiv, der nach einem Verbrecher Ausschau hält. Nennen wir ihn Mr. Cruel. (Er war ein berüchtigter Mörder, als ich ein Kind war - er ist in ein Haus eingebrochen, hat ein armes Mädchen entführt und ermordet, ihren Körper abgeladen und ist immer noch auf freiem Fuß - aber das ist eine andere Sache). Herr Cruel hat bestimmte Besonderheiten, mit denen ich ihn in einem Meer von Menschen eindeutig identifizieren kann. Wir haben 25 Millionen Menschen in Australien. Einer von ihnen ist Herr Cruel. Wie können wir ihn finden?
Schlechte Möglichkeiten, Mr Cruel zu identifizieren
Anscheinend hat Herr Cruel blaue Augen. Das ist keine große Hilfe, da fast die Hälfte der Bevölkerung in Australien auch blaue Augen hat.
Gute Möglichkeiten, Herrn Cruel zu identifizieren
Was kann ich noch verwenden? Ich weiß: Ich werde einen Fingerabdruck verwenden!
Vorteile :
- Es ist wirklich sehr schwer für zwei Personen, den gleichen Fingerabdruck zu haben (nicht unmöglich, aber äußerst unwahrscheinlich).
- Der Fingerabdruck von Herrn Cruel wird sich nie ändern.
- Jeder einzelne Teil des gesamten Wesens von Herrn Cruel: sein Aussehen, seine Haarfarbe, seine Persönlichkeit, seine Essgewohnheiten usw. müssen sich (idealerweise) in seinem Fingerabdruck widerspiegeln, so dass, wenn er einen Bruder hat (der sehr ähnlich, aber nicht gleich ist) - dann beides sollte haben verschiedene Fingerabdrücke. Ich sage "sollte", weil wir nicht 100% garantieren können, dass zwei Menschen auf dieser Welt unterschiedliche Fingerabdrücke haben.
- Wir können jedoch immer garantieren, dass Herr Cruel immer den gleichen Fingerabdruck hat - und dass sich sein Fingerabdruck NIEMALS ändert.
Die obigen Eigenschaften sorgen im Allgemeinen für gute Hash-Funktionen.
Wie sieht es also mit "Kollisionen" aus?
Stellen Sie sich also vor, ich bekomme einen Hinweis und finde jemanden, der zu Mr. Cruels Fingerabdrücken passt. Bedeutet das, dass ich Herrn Cruel gefunden habe?
........vielleicht! Ich muss genauer hinsehen. Wenn ich SHA256 (eine Hashing-Funktion) verwende und in einer kleinen Stadt mit nur 5 Personen suche, dann besteht eine sehr gute Chance, dass ich ihn gefunden habe! Aber wenn ich MD5 (eine andere berühmte Hashing-Funktion) verwende und in einer Stadt mit + 2 ^ 1000 Personen nach Fingerabdrücken suche, ist es eine ziemlich gute Möglichkeit, dass zwei völlig unterschiedliche Personen denselben Fingerabdruck haben.
Was ist der Vorteil von all dem überhaupt?
Der einzige wirkliche Vorteil von Hashcodes besteht darin, dass Sie etwas in eine Hash-Tabelle einfügen möchten - und mit Hash-Tabellen möchten Sie Objekte schnell finden - und hier kommt der Hash-Code ins Spiel. Sie ermöglichen es Ihnen, Dinge wirklich in Hash-Tabellen zu finden schnell. Es ist ein Hack, der die Leistung massiv verbessert, aber mit einem geringen Aufwand an Genauigkeit.
Stellen wir uns also vor, wir haben einen Hash-Tisch voller Menschen - 25 Millionen Verdächtige in Australien. Mr Cruel ist irgendwo da drin ..... Wie können wir ihn wirklich schnell finden ? Wir müssen sie alle sortieren: um eine potenzielle Übereinstimmung zu finden oder um potenzielle Verdächtige auf andere Weise freizusprechen. Sie möchten nicht die einzigartigen Eigenschaften jeder Person berücksichtigen, da dies zu lange dauern würde. Was würden Sie stattdessen verwenden? Sie würden einen Hashcode verwenden! Ein Hashcode kann Ihnen sagen, ob zwei Personen unterschiedlich sind. Ob Joe Bloggs NICHT Mr Cruel ist. Wenn die Drucke nicht übereinstimmen, wissen Sie, dass es definitiv NICHT Mr Cruel ist. Aber wenn die Fingerabdrücke übereinstimmenAbhängig von der von Ihnen verwendeten Hash-Funktion stehen die Chancen gut, dass Sie Ihren Mann gefunden haben. Aber es ist nicht 100%. Der einzige Weg, auf dem Sie sicher sein können, besteht darin, weitere Nachforschungen anzustellen: (i) Hatte er / sie eine Gelegenheit / ein Motiv, (ii) Zeugen usw. usw.
Wenn Sie Computer verwenden und zwei Objekte denselben Hashcode-Wert haben, müssen Sie erneut untersuchen, ob sie wirklich gleich sind. Sie müssten beispielsweise prüfen, ob die Objekte z. B. dieselbe Größe, dasselbe Gewicht usw. haben, ob die Ganzzahlen gleich sind oder ob die customer_id übereinstimmt, und dann zu dem Schluss kommen, ob sie gleich sind. Dies erfolgt normalerweise möglicherweise durch Implementierung einer IComparer- oder IEquality-Schnittstelle.
Schlüsselübersicht
Ein Hashcode ist also im Grunde ein Fingerabdruck.
- Zwei verschiedene Personen / Objekte können theoretisch immer noch den gleichen Fingerabdruck haben. Oder mit anderen Worten. Wenn Sie zwei Fingerabdrücke haben, die gleich sind ......... dann müssen nicht beide von derselben Person / demselben Objekt stammen.
- Buuuuuut, dieselbe Person / dasselbe Objekt gibt immer
denselben Fingerabdruck zurück .
- Das heißt, wenn zwei Objekte unterschiedliche Hash-Codes zurückgeben, wissen Sie mit 100% iger Sicherheit, dass diese Objekte unterschiedlich sind.
Es dauert gut 3 Minuten, bis Sie sich mit dem oben Gesagten vertraut gemacht haben. Vielleicht lesen Sie es ein paar Mal, bis es Sinn macht. Ich hoffe, das hilft jemandem, denn ich habe viel Kummer gebraucht, um alles zu lernen!