Die Hash-Funktion in Java wurde als Lösung zum Definieren und Zurückgeben des Werts eines Objekts in Form einer Ganzzahl erstellt. Dieser als Ausgabe der Hash-Funktion erhaltene Rückgabewert wird als Hash-Wert bezeichnet. Jede Hashing-Funktion gibt eine Ganzzahl von 4 Bytes als Rückgabewert für das Objekt zurück. Zwei beliebige Objekte desselben Typs haben denselben ganzzahligen Wert wie die Ausgabe der Hashing-Funktion, und in ähnlicher Weise haben verschiedene Objekte unterschiedliche Hashwerte. Man kann die Objekte nicht aus dem Hashwert ableiten, und die Hashing-Funktion ist daher eine irreversible Funktion.
Was ist eine Hashing-Funktion?
Starten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Eine Hash-Funktion kann als eine Funktion definiert werden, die einen ganzzahligen Wert zurückgibt, der einem Objekt entspricht. Die Hash-Funktion gibt immer denselben ganzzahligen Wert für dasselbe Objekt zurück. Der von der Hash-Funktion zurückgegebene ganzzahlige Wert wird Hash-Wert genannt. Im Folgenden sind die wichtigen Punkte zur Hash-Funktion aufgeführt:
Hier sind die häufigsten Anwendungen von Hash-Funktionen:
Fast jede Programmiersprache enthält Hash-basierte Datenstrukturen. Java enthält beispielsweise eine Hash-Tabelle, eine Hash-Map, einen Hash-Satz und Baumsatz-Datenstrukturen, die auf der Hash-Funktion basieren. Bei diesen Datenstrukturen handelt es sich um das Schlüsselwert-Design, bei dem jeder Schlüssel eindeutig ist, während derselbe Wert für mehrere Schlüssel vorhanden sein kann.
Dieser Algorithmus wird bei einer Datenintegritätsprüfung verwendet. Dieser Algorithmus verwendet eine Nachricht beliebiger Länge als Eingabe und erzeugt Daten fester Länge (128 Bit) als Ausgabe. Beispiele für Message-Digest-Algorithmen sind MD2, MD4, MD5 und MD6.
Dieser Algorithmus dient der Datensicherheit und wird in Anwendungen und Protokollen wie Secure Socket Layer (SSL) verwendet. SHA-0, SHA-1, SHA-2 und SHA-3 sind gängige Kategorien des Secure Hash-Algorithmus.
Betrachten wir ein Anmeldeszenario, in dem bei Eingabe eines Passworts zur Authentifizierung eines Benutzers ein Hash-Wert des eingegebenen Passworts berechnet und über das Netzwerk an den Server gesendet wird, wo der Hash des Originals gespeichert wird. Dies geschieht, um sicherzustellen, dass kein Sniffing erfolgt, wenn ein Passwort vom Client an den Server gesendet wird.
Da in einer Programmiersprache unterschiedliche Schlüsselwörter verwendet werden, verwendet der Compiler zur Unterscheidung zwischen diesen Schlüsselwörtern und Bezeichnern ein Hash-Set, das mithilfe einer Hash-Tabelle implementiert wird, um alle diese Schlüsselwörter und Bezeichner zu speichern.
Es handelt sich um einen Suchalgorithmus, der Hashing nutzt, um nach einem oder mehreren Mustern in einer bestimmten Zeichenfolge zu suchen. Es ist einer der am häufigsten verwendeten Algorithmen.
Diese Schnittstellen enthalten Funktionen, die zum gleichzeitigen Vergleich zweier Objekte verwendet werden. Der Rückgabewert dieser Funktionen kann negativ, null oder positiv sein, je nachdem, ob ein bestimmtes Objekt kleiner, gleich oder größer als das Objekt ist, mit dem wir vergleichen. Intern verwenden Komparatoren und vergleichbare Schnittstellen eine Hash-Funktion, um Objekte miteinander zu vergleichen.
Die Prioritätswarteschlange unterscheidet sich von einer normalen Warteschlange, die der FIFO-Reihenfolge (First in First out) folgt. In der Prioritätswarteschlange werden Elemente in einer benutzerdefinierten Reihenfolge basierend auf ihrer Priorität angeordnet, die intern mithilfe von Vergleichs- und Komparatoren implementiert wird, die auf Hash-Funktionen basieren.
Hier sind einige allgemeine Designprinzipien zum Erstellen von Hash-Funktionen:
public int hashCode (){ //Logic goes here }
Eine Hash-Kollision tritt auf, wenn zwei oder mehr Objekte denselben Hash-Wert zurückgeben. Nehmen wir ein Beispiel einer Java-Hash-Map, die Daten in Schlüssel-Wert-Paaren speichert. Wenn wir ein Objekt in eine Hash-Map einfügen, wird der Hash-Wert des Schlüssels berechnet und basierend auf diesem Hash-Wert wird der Speicherort des Buckets zum Speichern des Wertobjekts gefunden. Objekte mit unterschiedlichen Hashwerten müssen in unterschiedliche Buckets verschoben werden. Wenn zwei oder mehr Objekte denselben Hashwert haben, werden sie mithilfe einer zusätzlichen Datenstruktur, einer sogenannten verknüpften Liste, am selben Bucket-Speicherort gespeichert. Alle Objekte mit demselben Hashwert werden mithilfe einer verknüpften Liste miteinander verkettet. Dieser Mechanismus wird als Verkettung bezeichnet. Im Folgenden finden Sie Möglichkeiten zum Umgang mit Kollisionen in einer Hash-Funktion:
Das Folgende sind die Vorteile des Hashings:
Abgesehen von den Vorteilen gibt es beim Hashing auch einige Einschränkungen:
Das obige ist der detaillierte Inhalt vonHashing-Funktion in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!