Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Datenstrukturen

Unterstützung von Hashing

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
So gut wie alle Programmiersprachen verfügen über fertige Hashfunktionen für gängige Objekte. Diese geben zumeist Integerwerte zurück. Bei individuellen Klassen müssen Sie zwar auf die Details achten, aber grundsätzlich sollte es keine Probleme geben.

Transkript

Falls Sie jetzt die Sorge haben, dass Sie eine Riesenanzahl an Hash-Funktionen selbst schreiben müssen, dankenswerterweise nein. Es ist sehr wahrscheinlich, dass die meisten Ihrer Objekte bereits perfekt einsetzbare Hash-Funktionen für das meiste von dem, was Sie vorhaben, mitbringen. Es hat zum Beispiel jede einzelne Klasse in Java eine Hashcode-Methode. Sie ist ein Bestandteil der grundlegenden Objektklassen und damit haben alle Klassen, die Sie definieren, alle Objekte, die Sie aus diesen Klassen erzeugen, bereits ein Default Hashcode-Verhalten, das eine Integer-Zahl zurückgibt. Ebenso haben alle Objective C-Objekte eine Hash-Methode. Alle Python-Objekte haben eine Hash-Methode. Alle Ruby-Objekte haben eine Hash-Methode. Normalerweise gibt eine gängige Hash-Funktionalität einen Integer-Wert zurück, der aus der ID oder der darunterliegenden Speicheradresse eines Objekts errechnet wird. Das bedeutet, dass jedes Objekt einen anderen Hash-Wert bekommen sollte, mit dem es aufgerufen werden kann. Und sollten Sie zwei separate Referenzen auf dasselbe Objekt haben, so sollten Sie trotzdem denselben Hash-Wert erhalten. Das ist das, was Sie wollen, denn es wird auf Basis des dem tatsächlichen Objekt zugrundeliegenden Speichereintrags errechnet. Wenn also alles, was Sie brauchen, ein eindeutiger Hash-Wert für jedes Objekt ist, dann haben Sie möglicherweise alles, was Sie brauchen. Oder zumindest wenn Sie Ihre eigene Klasse schreiben. Wenn Sie jemals neu definieren, dass die Objekte Ihrer Klasse gleich zu sein haben, dann sollten Sie auch die Hash-Funktion neu definieren. Lassen Sie es sich erklären. Das ist jetzt nur ein kurzer Ausflug in die Objektorientierung. Wenn Sie eine neue Klasse schreiben, bekommen Sie immer eine Art von automatisch gleichem Verhalten. So können Sie danach fragen, ob zwei Objekte dieser Klasse einander gleichen. Normalerweise sieht dieses automatische Verhalten auf die ID oder auf den Adressspeicher des Objekts. Ist Objekt A eigentlich das gleiche Objekt wie Objekt B? Verweisen sie auf denselben Speicherplatz? Wenn ja, sind sie gleich. Sonst sind sie nicht gleich. Wenn Sie aber den internen Status zweier Objekte vergleichen, dann deshalb, weil Sie zwei separate Objekte haben, die tatsächliche Kopien voneinander sind. Mit identischen wesentlichen Daten. Dann wollen Sie bei den beiden, dass ein Gleichheitscheck sich eben als wahr erweist. Dann versuchen Sie normalerweise, sich über die eigenen Gleichheitsmethoden Ihrer Klasse wegzusetzen. Oder die isequal-Methode oder die EQL-Methode, wie auch immer sie in Ihrer Sprache genannt wird. Das ist der Punkt, an dem wir wieder einen Schritt zurück in die Datenstruktur machen. Wann auch immer Sie sich über das Gleichheitsverhalten Ihrer Klasse hinwegsetzen, müssen Sie sich über das entsprechende Hash-Verhalten auch hinwegsetzen. Denn die Hash Codes sind zu sehr mit dem Gleichheitsprinzip gekoppelt, als dass sie von einer Veränderung nicht betroffen wären. Wie ich schon gesagt habe, wenn Sie zwei Objekte haben, die Sie für gleich halten, dann sollten Sie denselben Hash-Wert zurückgeben. Machen wir aus dem sollten ein müssen. Sie müssen denselben Hash-Wert zurückgeben. Wenn Sie also das ändern, was Ihre Objekte gleich sein lässt, sollte sich auch das ändern, was den Hash-Wert der Objekte ausgibt. OK. Wir halten's im Hinterkopf. Ich spreche hier von normalen Klassen. Wenn alles, was Sie je in einer Hash- Tabelle oder in Dictionaries unterbringen, String-Schlüssel mit String-Werten sind, müssen Sie sich eigentlich überhaupt keine Gedanken mehr machen. Denn String-Objekte haben bereits ihr Verhalten erweitert. Wenn Sie also zwei separate String-Objekte haben, werden sie nach wie vor als gleich erkannt und geben denselben Hash-Wert zurück, wenn sie denselben Inhalt haben. Auch wenn sie eigentlich separate String-Objekte an unterschiedlichen Speicherorten sind. Sie sollten beim Einsatz in Hash-Tabellen also keine Probleme verursachen.

Grundlagen der Programmierung: Datenstrukturen

Erhalten Sieeinen klaren Eindruck von Datenstrukturen und deren Eigenheiten und verstehen, wie Sie diese am besten einsetzen können – ganz unabhängig von den einzelnen Programmiersprachen.

2 Std. 51 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!