Heim >Java >JavaInterview Fragen >Sammlung klassischer Java-Interviewfragen (7)
1. Lassen Sie uns über den Unterschied zwischen ArrayList und Vector sprechen
(weitere empfohlene Interviewfragen: Java-Interviewfragen )
1. Synchronizität: Verwenden Sie synchronisiert, um Thread-Sicherheit zu erreichen, während ArrayList nicht sicher ist. Wenn nur ein Thread auf die Sammlung zugreift, ist es am besten, ArrayList zu verwenden Betrachten Sie Thread-Sicherheit, die Effizienz wird höher sein;
Wenn mehrere Threads auf die Sammlung zugreifen, ist es am besten, Vector zu verwenden, da wir nicht über Thread-sicheren Code nachdenken und ihn schreiben müssen.
2. Datenkapazitätswachstum: Beide haben eine anfängliche Kapazitätsgröße und verwenden linearen kontinuierlichen Speicherplatz. Wenn die Anzahl der gespeicherten Elemente die Kapazität überschreitet, muss der Speicherplatz beider erhöht werden, und Vector wächst um das Doppelte Originalwert, ArrayList erhöht sich um das 0,5-fache des Originalwerts.
2. Warum ist ArrayList threadunsicher?
Das Hinzufügen von Elementen zu ArrayList erfolgt in zwei Schritten, also im ersten Schritt besteht darin, zunächst die hinzuzufügenden Elemente an der Position von Objekt [Größe] zu speichern und im zweiten Schritt den Wert von Größe um 1 zu erhöhen.
Da dieser Prozess in einer Multithread-Umgebung nicht garantiert atomar sein kann, ist ArrayList in einer Multithread-Umgebung threadunsicher.
(Verwandte Tutorial-Empfehlungen: Java-Einführungs-Tutorial)
3. Was sind die Unterschiede zwischen HashMap, LinkedHashMap und TreeMap?
1. HashMap ist die am häufigsten verwendete Karte. Sie speichert Daten entsprechend dem HashCode-Wert des Schlüssels und hat eine sehr schnelle Zugriffsgeschwindigkeit. HashMap lässt nur zu, dass der Schlüssel eines Datensatzes null ist, und lässt nicht zu, dass der Wert mehrerer Datensätze null ist.
HashMap unterstützt keine Thread-Synchronisierung, das heißt, mehrere Threads können HashMap jederzeit gleichzeitig schreiben, was zu Dateninkonsistenzen führen kann. Wenn eine Synchronisierung erforderlich ist, können Sie die Methode Collections.synchronizedMap(HashMap Map) verwenden, um HashMap zu synchronisieren.
2. Hashtable ähnelt HashMap, außer dass die aufgezeichneten Schlüssel oder Werte nicht leer sein dürfen, d. h. es kann immer nur ein Thread in die Hashtable schreiben Dies führt jedoch auch dazu, dass Hashtable beim Schreiben langsamer wird.
3. LinkedHashMap speichert die Einfügereihenfolge von Datensätzen. Beim Durchlaufen von LinkedHashMap mit Iteraor muss der zuerst erhaltene Datensatz zuerst eingefügt werden. Beim Durchlaufen ist es langsamer als HashMap. Verfügt über alle Funktionen von HashMap.
4. TreeMap kann die gespeicherten Datensätze nach Schlüsseln sortieren. Standardmäßig können Sie auch einen Komparator für die Sortierung angeben. Wenn Sie Iteraor zum Durchlaufen einer TreeMap verwenden, werden die erhaltenen Datensätze sortiert. Die Schlüssel und Werte von TreeMap dürfen nicht leer sein.
4. Wie entferne ich doppelte Elemente aus einer Vector-Sammlung?
Verwenden Sie die Methode Vector.contains(), um zu bestimmen, ob das Element enthalten ist. Wenn es nicht enthalten ist, fügen Sie es einer neuen Sammlung hinzu, was für Fälle geeignet ist, in denen die Daten klein sind.
Es gibt auch eine einfache Möglichkeit, den Vektor zu durchlaufen und Set, SortdSet, HashSet usw. einzufügen.
(Empfohlenes Video-Tutorial: Java-Video-Tutorial)
5. Welche Eigenschaften haben die drei Schnittstellen List, Map und Set beim Zugriff auf Elemente?
1. Doppelte Elemente sind in Set nicht zulässig
Elemente speichern:
Die Add-Methode hat einen booleschen Rückgabewert, wenn kein solcher vorhanden ist Element in der Menge: Wenn die Add-Methode das Element erfolgreich hinzufügen kann, gibt sie true zurück. Wenn die Menge ein Element enthält, das gleich einem Element ist, kann die Add-Methode das Element zu diesem Zeitpunkt nicht hinzufügen und gibt das Ergebnis zurück ist falsch.
Elemente abrufen:
Es gibt keine Möglichkeit zu sagen, welche Zahl abgerufen werden soll. Sie können nur alle Elemente über die Iterator-Schnittstelle abrufen und dann jedes Element einzeln durchlaufen.
2. Liste stellt eine sequentielle Sammlung dar
Speichern von Elementen:
Wenn die Methode add(Object) mehrmals aufgerufen wird, werden die jedes Mal hinzugefügten Objekte in der Reihenfolge sortiert Nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ können Sie auch in die Warteschlange springen, dh die Methode add(int index,Object) aufrufen, um den Speicherort des aktuellen Objekts in der Sammlung anzugeben.
Elemente abrufen:
Methode 1: Die Iterator-Schnittstelle ruft alle Elemente ab und durchläuft jedes Element einzeln.
Methode 2: Rufen Sie get(index i) auf, um klar anzugeben, welcher Index verwendet werden soll. Verwenden Sie diese Schnittstelle, um die Einfügeposition jedes Elements genau zu steuern. Benutzer können über den Index (die Position des Elements in der Liste, ähnlich einem Array-Index), der dem Java-Array ähnelt, auf Elemente in der Liste zugreifen.
3. Map ist eine zweispaltige Sammlung
Elemente speichern:
Verwenden Sie bei jedem Speichern die Methode put(obj key, obj value). Sie müssen einen Schlüssel/Wert speichern. Doppelte Schlüssel können nicht gespeichert werden. Die Duplizierungsregel basiert auch auf dem Gleichheitsvergleich.
Elemente abrufen:
Verwenden Sie die Methode get(Object key), um den entsprechenden Wert basierend auf dem Schlüssel abzurufen. Sie können auch eine Sammlung aller Schlüssel, eine Sammlung aller Werte und eine Sammlung von Map.Entry-Objekten bestehend aus Schlüsseln und Werten abrufen.
Liste enthält Elemente in einer bestimmten Reihenfolge und kann doppelte Elemente enthalten; Set kann keine doppelten Elemente enthalten und ist intern sortiert; der Wert kann mehrwertig sein.
Das obige ist der detaillierte Inhalt vonSammlung klassischer Java-Interviewfragen (7). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!