Fragen und Antworten zum Hashmap-Interview [Für Anfänger und Fortgeschrittene]
Veröffentlicht: 2020-09-24Die Klasse java.util.HashMap ist mit Abstand eine der wichtigsten Bibliotheken von Java. Selten gibt es ein Projekt, das in Java geschrieben ist und bei seiner Implementierung nicht die Bibliothek von HashMap verwendet. Es ist die Art und Weise, wie diese Datenstruktur implementiert ist, was sie für jedes Java-bezogene Programm fast unverzichtbar macht. HashMap ist in seiner Definition sehr einfach. HashMap ist eine Datenstruktur, die mit einem sehr tabellarischen Ansatz implementiert wird.
Es wird zu Recht gesagt, wenn es nur eine Datenstruktur geben würde, müsste es HashMap sein. Dies ist nicht nur sehr nützlich, sondern auch sehr zeitsparend. Eine einfache Suche in HashMap dauert nur etwa O(1) Zeit (was bedeutet, dass die gesamte Suche in einer HashMap in konstanter Zeit erfolgt). In der Programmiersprache Java finden Sie viele Implementierungen von HashMap, wie z. B. HashTable, concurrenthashmaps usw. Wenn Sie jedoch nach einer allgemeinen Implementierung suchen, sollten Sie sich nicht weit von der grundlegenden HashMap entfernen.
Jede dieser Implementierungen von HashMap verfügt über eigene Funktionen und Anwendungsfälle. Wenn Sie möchten, dass die Reihenfolge, in der Sie das Mapping geschrieben haben, erhalten bleibt, sollten Sie die Linked HashMap verwenden. Wenn Sie möchten, dass Ihre Zuordnung sortiert wird, sollten Sie die TreeMap-Implementierung von HashMap verwenden, die die Sortierung für Sie übernimmt.
Wenn Sie auf ähnliche Weise nach einer Thread-sicheren Hash-Tabelle suchen, die auch in einer gleichzeitigen Anwendung verwendet werden kann, während die Skalierbarkeit beibehalten wird, würden Sie sich eine gleichzeitige HashMap ansehen.
Wie Sie sehen können, gibt es verschiedene Möglichkeiten, wie Sie HashMap verwenden können. Um die Bedeutung von HashMap wirklich zu kennen, sollten Sie sich die Interviewfragen für jedes Stellenprofil als Softwareentwickler ansehen. Sie können die Zeit nicht richtig optimieren, wenn Sie nicht wissen, wie man eine HashMap richtig implementiert. Wenn Sie also ein Programmierer sind, können Sie nicht davon ablassen, die Vor- und Nachteile von HashMap zu lernen. Deshalb haben wir im Folgenden einige herausragende Hashmap-Interviewfragen aufgelistet, die Ihnen bei der Vorbereitung auf Ihr nächstes Vorstellungsgespräch helfen sollen.
Lernen Sie den Data Science-Kurs online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Inhaltsverzeichnis
Fragen und Antworten zum Hashmap-Interview
Q1. Wie werden Sie die put()-Methode von HashMap in Java verwenden?
Ans. Die Methode von put() funktioniert einfach, indem sie sich das als Hashing bekannte Prinzip zunutze macht. Sie würden diese Funktion verwenden, um das betreffende Objekt im Backend zu speichern (das ein Array von Speicher ist). Um die genaue Position dieses Objekts im Backend ermitteln zu können, müssten Sie zusammen mit dieser put()-Funktion eine weitere Funktion verwenden. Die Funktion hashcode() wird als Hilfsfunktion für put() auf die zuvor beschriebene Weise verwendet.
Die beiden Funktionen arbeiten also so zusammen, dass sie im Backend nach dem verfügbaren Schlüssel und dem Speicherplatz suchen. Wenn sie zufällig kollidieren, wird das Objekt, das beide Werte hat (d. h. die Werte von Schlüssel und Wert), dann in eine dynamische Implementierung einer Liste aufgenommen, die auch als verkettete Liste bezeichnet wird. Die Like-Liste wird hier an dem zuvor gefundenen Speicherplatz gespeichert.
Q2. Was sind die grundlegenden Anforderungen, die ein Objekt erfüllen muss, damit es entweder als Schlüssel oder als Wert einer HashMap verwendet werden kann?
Ans. Sowohl der Schlüssel als auch der Wert, die wir in jeder HashMap und ihrer Implementierung verwenden, sollten diese beiden Funktionen ebenfalls enthalten. Die Namen dieser beiden Funktionen sind equals() und hashcode(). Die Funktion mit dem Namen hashcode() wird verwendet, wenn wir den Wert des Schlüssels in eine beliebige HashMap einfügen. Gleichzeitig wird die Funktion von equals() nur aufgerufen, wenn wir versuchen, den Wert zurückzubekommen, der bereits in der HashMap gespeichert war.
Q3. Nehmen wir an, Sie haben den Überblick über die Schlüssel verloren, die Sie bereits in Ihrer HashMap verwendet haben. Der nächste Schlüssel, den Sie hinzufügen möchten, ist bereits in der HashMap vorhanden. Was glauben Sie, wird in diesem Fall passieren?
Ans. Wenn Sie der Meinung sind, dass ein Fehler vorliegen sollte, liegen Sie nicht falsch, wenn wir nicht über HashMap gesprochen haben. Wenn Sie jedoch HashMap verwenden und zufällig einen Schlüssel einfügen, dessen Wert bereits in der Hashmap vorhanden war, gibt der Java-Compiler keinen Fehler aus. Stattdessen würde der Compiler einfach den Wert finden, der mit dem von Ihnen eingegebenen Schlüssel verknüpft ist, und nur den Wert dort aktualisieren.
Wenn Sie die Funktion put() verwenden, um den Wert zur Hashmap hinzuzufügen, wäre der Rückgabewert dieser Funktion der alte Wert, der diesem Schlüssel zugeordnet ist. Nehmen wir also an, dass Sie für Schlüssel A einen gespeicherten Wert von 1 haben. Wenn Sie jetzt den Wert von A auf 50 setzen, dann ist der Wert, der von der Funktion put() zurückgegeben wird, 1 , und der im Schlüssel A gespeicherte Endwert wäre 50.
Q4. Für den Fall, dass ein Nullwert gespeichert werden muss. Könnten Sie in diesem Fall HashMap verwenden?
Ans. Ja, wir könnten Hashmap in diesem Fall problemlos verwenden, da Hashmaps den Wert, den Sie speichern können, nicht verringern. Sie können in jeder Hashmap so viele Nullwerte speichern, wie Ihr Herz begehrt.
Q5. Wie werden Kollisionen mit der Hashmap-Implementierung in Java behandelt?
Ans. Die Codebibliothek von java.util.HashMap verwendet die Methode der Verkettung, um die Kollisionen zu behandeln. Diese Verkettung funktioniert so, dass jeder neue Eintrag in der Hashmap, der sowohl das Schlüssel- als auch das Wertepaar enthält, in einer verknüpften Liste gespeichert wird, und diese Liste dann dort gespeichert wird, wo sich die vorhandenen Daten der Hashmaps befinden (der Bucket-Speicherort). .
Falls sich herausstellt, dass alle Schlüssel, die Sie in Ihrer Hashmap haben, denselben Hashcode haben, dann ist Ihre Hashmap keine Hashmap mehr. Es wird in eine verknüpfte Liste umgewandelt. Die Nachschlagezeit wird für die Größenordnung von Eins (o(1)), dh konstante Zeit, bis zur Größenordnung von N (O(N)) zunehmen, was eine lineare Zeit ist.
F6. Können Sie einen Schlüssel mit einem Nullwert in einer Java-Implementierung von Hashmap speichern?
Ans. Ja, in der Java-Implementierung der Hashmap können Sie Schlüssel mit einem Nullwert speichern. Sie können jedoch nur einen solchen Schlüssel speichern, der immer am Anfang der Bucket-Liste gespeichert wird. Die Hashmap ruft hier nicht die Funktion hashcode() auf, denn wenn diese Funktion für eine Nulltaste verwendet wird, wird sie einen Null-Zeiger-Ausnahmefehler auslösen. Sie müssen die get-Funktion verwenden, anstatt den Nullwert als Schlüssel zu verwenden, wenn Sie möchten, dass der erste Index Ihrer Hashmap an Sie zurückgegeben wird.

Lesen Sie: Sortieren in der Datenstruktur: Kategorien & Typen
Q7. Welche Datenstruktur soll hashmap Ihrer Meinung nach nachahmen?
Ans. Die Hashmap soll das Aussehen und die Funktionalität der Datenstruktur der Hashtabelle nachahmen. Die Hash-Tabellen-Datenstruktur ist die ideale Wahl, wenn Sie die Werte in Form eines Schlüssel-Wert-Paares speichern möchten. Der Hauptgrund, warum diese Hash-Tabelle bevorzugt wird, liegt in der Suchzeit. Wenn Sie also den Schlüssel haben, nach dem Sie suchen möchten, können Sie in nur einer oder konstanter Reihenfolge den gewünschten Wert zurückerhalten.
Q8. Da Hashmap keine der Kerndatenstrukturen wie Struktur oder Arrays ist. Was passiert Ihrer Meinung nach unter der Haube, wenn Sie eine Hashmap erstellen? Die Kombination welcher Datenstruktur hat uns Ihrer Meinung nach die Hashmaps gegeben?
Ans. Obwohl die Hashmap eigentlich eine Hashtabelle darstellt, ist sie unter der Haube nicht direkt implementiert. Wir verwenden zwei bekannte Datenstrukturen, um einer Hashmap Leben einzuhauchen. Wir verwenden eine verkettete Liste und Arrays. Eine verknüpfte Liste wird verwendet, um das Schlüssel-Wert-Paar dynamisch zu speichern, und das Array wird verwendet, um alle diese verknüpften Listen darin zu speichern; zusammen bilden sie eine Hashmap.
Ab Java 8 implementiert Java, wenn die verknüpfte Liste ausreichend groß wird, anstelle der verknüpften Liste einen binären Suchbaum. Diese Änderung wird vorgenommen, um Zeit zu sparen und die Gesamtleistung von hashmap zu verbessern.
Lesen Sie auch: Interviewfragen für Data Science
Q9. Falls wir mehrere Werte unter demselben Schlüssel speichern möchten, glauben Sie, dass dies in der in Java vorhandenen Hashmap-Implementierung möglich sein wird?
Ans. Nein, Sie können keine doppelten Schlüssel in der Hashmap speichern. Wenn Sie versuchen, einen neuen Wert in einem Schlüssel zu speichern, der bereits in der Hashmap vorhanden ist, entfernt die Hashmap einfach den Wert, der zuvor in diesem Schlüssel gespeichert war, und ersetzt ihn durch den neuen.
Die Größe der Hashmap würde sich in diesem Fall nicht ändern, was bedeutet, dass der Hashmap keine Schlüssel hinzugefügt werden. Diese Funktion ist einer der Gründe, warum wir die Funktion keyset() verwenden, um alle Schlüssel einer Hashmap zurückzubekommen, und dass diese Funktion eine Menge und keine Sammlung zurückgibt (weil in einer Menge alle Werte eindeutig sein müssen).
Q10. Können Sie doppelte Werte in HashMap speichern?
Ans. Ja, Sie können doppelte Werte in der Hashmap speichern. Das ist der Grund, wenn Sie alle Werte aus der Hashmap abrufen. Anstatt ein Set zu bekommen, bekommen wir dann eine Kollektion. Der Wert wird nicht in Form einer Liste angegeben, da die Bestellung nicht garantiert ist.
Q11. Ist die Java-Implementierung der Hashmap Thread-sicher?
Ans. Nein, die Vanilla Hashmap ist in Java überhaupt nicht Thread-sicher. Idealerweise sollten Sie es vermeiden, die Hashmap an einen Thread weiterzugeben, der den Wert ändern und die Hashmap in irgendeiner Form oder Form bearbeiten kann. Sie können jedoch eine schreibgeschützte Hashmap verwenden und diese dann in den Thread einspeisen. Auf diese Weise ändern sich die darin enthaltenen Werte nicht.
Q12. Was wird Ihrer Meinung nach passieren, wenn wir die Hashmap in einer Anwendung verwenden, die mehrere Threads verwendet?
Ans. Wenn Sie zufällig eine Hashmap an eine Anwendung übergeben, die mehr als einen Thread verwendet, und jeder dieser Threads die in der Hashmap gespeicherten Werte ändern, hinzufügen oder entfernen kann, werden die internen Daten, durch die die Hashmap erstellt wurde, beschädigt . Die Links, die zur Bildung der Hashmap verwendet wurden, würden verloren gehen, und dann würde die Hashmap ihre Struktur verlieren, und auch ihr Zweck würde verloren gehen. Daher wird immer empfohlen, dass Sie immer Thread-sichere Hashmaps verwenden, wenn Sie sie in einer Anwendung mit Threads verwenden möchten.
Q13. Wenn wir über die gesamte HashMap in Java iterieren möchten. Welche Möglichkeiten gibt es, dies zu tun?
Ans. Es gibt viele Möglichkeiten, wie Sie in Java über eine Hashmap iterieren können. einige von ihnen sind unten aufgeführt:
- Sie können die Funktion keySet in Verbindung mit einer Iterationsvariablen verwenden.
- Sie können die Funktion enterySet in Verbindung mit einer Iterationsvariablen verwenden.
- Sie können die Funktion entrySet verwenden und mit einer erweiterten Schleife verwenden.
- Sie können das keySet verwenden und eine Methode abrufen.
Lesen Sie auch: Datenstrukturen und Algorithmen in Python: Alles, was Sie wissen müssen
Was als nächstes?
Wenn Sie neugierig sind, etwas über Data Science zu lernen, schauen Sie sich das Executive PG Program in Data Science von IIIT-B & upGrad an, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische Workshops, Mentoring mit Branchenexperten, 1 -on-1 mit Branchenmentoren, mehr als 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.
Wie unterscheidet sich eine Hashtable von einer HashMap?
Eine nicht synchronisierte Datenstruktur ist eine HashMap. Eine Hashtable hingegen ist Thread-sicher und kann von vielen Threads gemeinsam genutzt werden, ohne dass ein Synchronisierungscode erforderlich ist. Hashtable erlaubt keinen Nullschlüssel oder mehrere Nullwerte, aber HashMap erlaubt es. In Anwendungen ohne Threads sollte HashMap anstelle von Hashtable verwendet werden. Einfach gesagt, HashMap sollte in Singlethread- oder nicht synchronisierten Anwendungen verwendet werden.
Ist es schneller, eine HashMap oder eine TreeMap zu verwenden?
In einer TreeMap werden die Werte durch den Schlüssel bestimmt. Es kann keinen Nullschlüssel haben, aber es kann mehrere Nullwerte haben. Es ist identisch mit HashMap, außer dass es anstelle der aufsteigenden Reihenfolge die aufsteigende Reihenfolge beibehält (sortiert nach der natürlichen Reihenfolge seines Schlüssels). HashMap verwendet eine Array-basierte Datenstruktur, um seine Komponenten gemäß der Hash-Funktion als Hash-Tabellen-basierte Implementierung zu organisieren. Für die meisten Operationen wie add(), delete() und contains prognostiziert HashMap eine konstante Leistung von O(1) (). Infolgedessen ist es viel schneller als eine TreeMap.
Wann ist es besser, HashMap anstelle einer ArrayList zu verwenden?
Nur wenn für die Daten, die wir speichern möchten, eindeutige Schlüssel verfügbar sind, macht HashMap Sinn. Wenn wir nach Dingen suchen, die auf einem Schlüssel basieren, sollten wir ihn verwenden, da eine schnelle Zugriffszeit ein Muss ist. Wenn es wichtig ist, die gleiche Reihenfolge der Einträge in einer Sammlung beizubehalten, sollten wir HashMap vermeiden. Sie sind beide voneinander verschieden und dienen unterschiedlichen Zwecken. Wenn Sie Objekte in Java speichern möchten, verwenden Sie HashMap, um Schlüssel Werten zuzuordnen, andernfalls ArrayList.