Heim >Java >JavaInterview Fragen >Unterschiede zwischen Java-Sammlungen bei Interviewfragen
Was ist der Unterschied zwischen HashMap und Hashtable?
HashMap und Hashtable implementieren beide die Map-Schnittstelle, daher sind viele Funktionen sehr ähnlich. Sie weisen jedoch die folgenden Unterschiede auf: HashMap lässt zu, dass Schlüssel und Werte null sind, während Hashtable nicht zulässt, dass Schlüssel oder Werte null sind. (Empfohlenes Lernen: Java-Interviewfragen)
Hashtable ist synchron, HashMap jedoch nicht. Daher eignet sich HashMap besser für Single-Thread-Umgebungen, während Hashtable für Multi-Thread-Umgebungen geeignet ist.
HashMap bietet eine Sammlung von Schlüsseln, die zum Durchlaufen verwendet werden können. Daher ist HashMap ausfallsicher. Andererseits bietet Hashtable eine Aufzählung von Schlüsseln.
Hashtable wird im Allgemeinen als Legacy-Klasse betrachtet.
Was ist der Unterschied zwischen Array (Array) und Liste (ArrayList)? Wann sollten Sie Array anstelle von ArrayList verwenden?
Die Unterschiede zwischen Array und ArrayList sind unten aufgeführt:
Array kann Basistypen und Objekttypen enthalten, und ArrayList kann nur Objekttypen enthalten.
Die Größe von Array ist fest und die Größe von ArrayList ändert sich dynamisch.
ArrayList bietet weitere Methoden und Funktionen, wie zum Beispiel: addAll(), removeAll(), iterator() usw. Für grundlegende Datentypen verwenden Sammlungen Autoboxing, um den Codierungsaufwand zu reduzieren. Dieser Ansatz ist jedoch relativ langsam, wenn es um primitive Datentypen fester Größe geht.
Was ist der Unterschied zwischen ArrayList und LinkedList?
Sowohl ArrayList als auch LinkedList implementieren die List-Schnittstelle. Sie weisen die folgenden Unterschiede auf:
ArrayList ist eine indexbasierte Datenschnittstelle und ihre unterste Ebene ist ein Array. Es kann einen wahlfreien Zugriff auf Elemente mit einer Zeitkomplexität von O(1) durchführen. Dementsprechend speichert LinkedList seine Daten in Form einer Liste von Elementen. Jedes Element ist mit seinen vorherigen und nachfolgenden Elementen verknüpft. In diesem Fall beträgt die Zeitkomplexität zum Auffinden eines Elements.
Im Vergleich zu ArrayList sind die Einfüge-, Hinzufügungs- und Löschvorgänge von LinkedList schneller, da beim Hinzufügen eines Elements an einer beliebigen Position in der Sammlung keine Neuberechnung der Größe oder Aktualisierung des Index wie bei einem Array erforderlich ist.
LinkedList benötigt mehr Speicher als ArrayList, da LinkedList für jeden Knoten zwei Referenzen speichert, eine auf das vorherige Element und eine auf das nächste Element.
Sie können sich auch auf ArrayList vs. LinkedList beziehen.
Wofür werden die Comparable- und Comparator-Schnittstellen verwendet? Listen Sie ihre Unterschiede auf.
Java stellt die Comparable-Schnittstelle bereit, die nur eine CompareTo()-Methode enthält. Diese Methode kann zwei Objekte sortieren. Insbesondere werden negative Zahlen, 0 und positive Zahlen zurückgegeben, um anzuzeigen, dass das Eingabeobjekt kleiner, gleich oder größer als ein vorhandenes Objekt ist.
Java stellt die Comparator-Schnittstelle mit zwei Methoden bereit: Compare() und Equals(). Die Methode „compare()“ wird zum Sortieren zweier Eingabeparameter verwendet und gibt eine negative Zahl, 0, zurück. Eine positive Zahl gibt an, dass der erste Parameter kleiner, gleich oder größer als der zweite Parameter ist.
Die Methode equal() erfordert ein Objekt als Parameter, mit dem ermittelt wird, ob der Eingabeparameter dem Komparator entspricht. Diese Methode gibt nur dann „true“ zurück, wenn der Eingabeparameter auch ein Komparator ist und das Sortierergebnis des Eingabeparameters und des aktuellen Komparators dasselbe ist.
Was ist der Unterschied zwischen HashSet und TreeSet?
HashSet wird durch eine Hash-Tabelle implementiert, daher sind seine Elemente ungeordnet. Die zeitliche Komplexität der Methoden add(), remove() und contains() beträgt O(1).
Andererseits wird TreeSet durch eine Baumstruktur implementiert und die darin enthaltenen Elemente sind geordnet. Daher beträgt die zeitliche Komplexität der Methoden add(), remove() und contains() O(logn).
Was ist der Unterschied zwischen HashMap und ConcurrentHashMap?
ConcurrentHashMap ist eine threadsichere Implementierung von HashMap. Die Hauptunterschiede sind wie folgt:
ConcurrentHashMap unterteilt das gesamte Bucket-Array in Segmente und verwendet dann Sperren, um jedes Segment zu schützen. Im Vergleich zur Syn-Schlüsselwortsperre von Hashtable ist die Granularität feiner besser. HashMap verfügt über keinen Sperrmechanismus und ist nicht threadsicher.
Die Schlüssel-Wert-Paare von HashMap erlauben Null, aber ConCurrentHashMap lässt dies nicht zu.
Nach JDK8 ermöglicht ConcurrentHashMap eine neue Art der Implementierung unter Verwendung des CAS-Algorithmus.
Erben Liste, Satz und Karte von der Sammlungsoberfläche?
List und Set sind vorhanden, Map jedoch nicht. Map ist ein Schlüssel-Wert-Paar-Mapping-Container, der sich offensichtlich von List und Set unterscheidet und keine doppelten Elemente zulässt (dasselbe gilt für Mengen in der Mathematik). geeignet für numerische Werte.
Nennen Sie die Speicherleistung und Funktionen von ArrayList, Vector und LinkedList?
ArrayList und Vector verwenden beide Arrays zum Speichern von Daten. Die Anzahl der Array-Elemente ist größer als die tatsächlich gespeicherten Daten, sodass Elemente hinzugefügt und eingefügt werden können. Beide ermöglichen die direkte Indizierung von Elementen, das Einfügen von Elementen ist jedoch erforderlich Da Vector die synchronisierte Methode (Thread-Sicherheit) verwendet, ist die Leistung normalerweise schlechter als bei ArrayList.
LinkedList verwendet eine doppelt verknüpfte Liste, um die Speicherung zu implementieren (verknüpft verstreute Speichereinheiten im Speicher durch zusätzliche Referenzen, um eine lineare Struktur zu bilden, die anhand der Seriennummer indiziert werden kann. Diese Kettenspeichermethode stimmt mit der kontinuierlichen Speichermethode überein Im Vergleich zu (tatsächlich ist die Speicherauslastung höher) erfordert die Indizierung von Daten nach Seriennummer einen Vorwärts- oder Rückwärtsdurchlauf, aber beim Einfügen von Daten müssen Sie nur die Vorher- und Nachher-Elemente dieses Elements aufzeichnen, also das Einfügen Geschwindigkeit ist schneller.
Vector ist ein Legacy-Container (der im frühen JDK verwendete Container, zusätzlich zu Hashtable, Dictionary, BitSet, Stack und Properties, sind alles Legacy-Container. Die Verwendung wird nicht mehr empfohlen, da ArrayList und LinkedListed sind beide nicht threadsicher. Wenn mehrere Threads denselben Container betreiben müssen, können Sie ihn vor der Verwendung über die Methode „synchonizedList“ in der Toolklasse „Collections“ in einen threadsicheren Container konvertieren (dies ist tatsächlich das beste Beispiel dafür). Der Dekorationsmodus, der das Objekt an den Konstruktor einer anderen Klasse übergeben wird, um ein neues Objekt zu erstellen und neue Funktionen hinzuzufügen.
Welche Eigenschaften haben die drei Schnittstellen List, Map und Set beim Speichern von Elementen?
Liste ist eine geordnete Sammlung. Mit dieser Schnittstelle können Sie die Einfügeposition jedes Elements genau steuern. Benutzer können über einen Index (die Position des Elements in der Liste, ähnlich einem Array-Index) auf Elemente in einer Liste zugreifen, ähnlich wie bei Java-Arrays.
Set ist eine Sammlung, die keine doppelten Elemente enthält, d. h. zwei beliebige Elemente e1 und e2 haben e1.equals(e2)=false und Set hat höchstens ein Nullelement.
Map-Schnittstelle: Bitte beachten Sie, dass Map nicht die Collection Map erbt, die den Schlüssel zur Wertezuordnung bereitstellt.
Das obige ist der detaillierte Inhalt vonUnterschiede zwischen Java-Sammlungen bei Interviewfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!