Heim  >  Artikel  >  Java  >  Grundlegende Fragen zu Java-Hochfrequenzinterviews – Teil des Sammlungsrahmens

Grundlegende Fragen zu Java-Hochfrequenzinterviews – Teil des Sammlungsrahmens

王林
王林nach vorne
2020-08-28 15:49:291739Durchsuche

Grundlegende Fragen zu Java-Hochfrequenzinterviews – Teil des Sammlungsrahmens

1. Der Unterschied zwischen ArrayList und Vector

(Weitere Empfehlungen für Interviewfragen: Java-Interviewfragen und -antworten)

Beide Klassen implementieren die List-Schnittstelle (die List-Schnittstelle erbt die Collection-Schnittstelle), beide Klassen sind es Eine geordnete Menge, das heißt, die Positionen der in den beiden Mengen gespeicherten Elemente sind geordnet, was einem dynamischen Array entspricht. Wir können später ein Element entsprechend der Positionsindexnummer herausnehmen, und die darin enthaltenen Daten sind zulässig Ja, das ist der größte Unterschied zu Sammlungen wie HashSet. Sammlungen wie HashSet können keine Elemente anhand der Indexnummer abrufen und erlauben auch keine doppelten Elemente.

Der Unterschied zwischen ArrayList und Vector umfasst hauptsächlich zwei Aspekte:

(1) Synchronizität:

Vector ist threadsicher, was bedeutet, dass seine Methoden threadsynchronisiert sind, während ArrayList threadunsicher ist. Ja, seine Methoden sind Threads -asynchron. Wenn nur ein Thread auf die Sammlung zugreift, ist es am besten, ArrayList zu verwenden, da es die Thread-Sicherheit nicht berücksichtigt und effizienter ist. Wenn mehrere Threads auf die Sammlung zugreifen, ist es am besten, Vector zu verwenden, da dies nicht erforderlich ist Machen Sie es selbst. Denken Sie über Thread-sicheren Code nach und schreiben Sie ihn erneut.

(2) Datenwachstum:

Sowohl ArrayList als auch Vector haben eine anfängliche Kapazität. Wenn die Anzahl der darin gespeicherten Elemente die Kapazität überschreitet, muss stattdessen der Speicherplatz von ArrayList und Vector jedes Mal erhöht werden Beim Hinzufügen nur einer Speichereinheit müssen mehrere Speichereinheiten hinzugefügt werden. Die Anzahl der hinzugefügten Speichereinheiten muss jedes Mal ein bestimmtes Gleichgewicht zwischen Speicherplatznutzung und Programmeffizienz erreichen.

Vector wächst standardmäßig um das Doppelte seiner ursprünglichen Größe, während die Wachstumsstrategie von ArrayList im Dokument nicht klar angegeben ist (aus dem Quellcode geht hervor, dass es um das 1,5-fache seiner ursprünglichen Größe wächst). Sowohl ArrayList als auch Vector können die anfängliche Raumgröße festlegen, und Vector kann auch die Größe des Wachstumsraums festlegen, während ArrayList keine Methode zum Festlegen des Wachstumsraums bereitstellt.

Zusammenfassung: Vector vergrößert sich um das Doppelte seiner ursprünglichen Größe und ArrayList vergrößert sich um das 0,5-fache seiner ursprünglichen Größe.

2. Der Unterschied zwischen HashMap und Hashtable

HashMap ist eine einfache Implementierung von Hashtable (nicht threadsichere Implementierung). Der Hauptunterschied besteht darin, dass HashMap leere (Null-)Schlüsselwerte zulässt (Schlüssel). Da es nicht threadsicher ist, ist die Effizienz höher als bei Hashtable, wenn nur ein Thread darauf zugreift.

HashMap ermöglicht die Verwendung von null als Schlüssel oder Wert eines Eintrags, Hashtable jedoch nicht.

HashMap entfernt die Methode „Contains“ von Hashtable und ändert sie in „ContainsValue“ und „ContainsKey“. Weil die Methode „enthält“ leicht irreführend ist.

Hashtable erbt von der Dictionary-Klasse und HashMap ist eine Implementierung der in Java 1.2 eingeführten Map-Schnittstelle.

Der größte Unterschied besteht darin, dass die Methode von Hashtable synchronisiert ist, HashMap jedoch nicht. Wenn mehrere Threads auf Hashtable zugreifen, müssen Sie die Synchronisierung für die Methoden nicht selbst implementieren, während HashMap die Synchronisierung dafür bereitstellen muss.

HashMap und HashTable basieren hauptsächlich auf drei Aspekten.

(1) Historische Gründe: Hashtable basiert auf der alten Dictionary-Klasse und HashMap ist eine Implementierung der in Java 1.2 eingeführten Map-Schnittstelle.

(2) Synchronizität: Hashtable ist threadsicher, was bedeutet, dass es synchron ist, und HashMap ist ein unsicheres Online-Programm und nicht synchron

(3) Wert: Nur HashMap ermöglicht die Verwendung eines Nullwerts als Schlüssel oder Wert eines Tabelleneintrags

(Lernvideo-Empfehlung:

Java-Kurs)

3 Was ist der Unterschied zwischen Liste und Karte?

Eine ist eine Sammlung, die einspaltige Daten speichert, und die andere ist eine Sammlung, die zweispaltige Daten wie Schlüssel und Werte speichert. Die in der Liste gespeicherten Daten sind sequentiell und ermöglichen eine Duplizierung ; Die in Map gespeicherten Daten sind nicht geordnet, ihre Schlüssel können nicht wiederholt werden und ihre Werte können wiederholt werden.

4. Erben List, Set und Map von der Collection-Schnittstelle

Ja für List, Set, aber nicht Map

5 Welche Eigenschaften haben die drei Schnittstellen List, Map und Set beim Zugriff? Elemente?

(Diese Art von Frage vergleicht das Testniveau in zwei Aspekten: Zum einen geht es darum, den Inhalt wirklich zu verstehen, und zum anderen darum, über gute Zusammenfassungs- und Präsentationsfähigkeiten zu verfügen.)

Erstens sind List und Set ähnlich, beide Da es sich um eine Sammlung einzelner Spaltenelemente handelt, verfügen diese über eine gemeinsame übergeordnete Schnittstelle namens Collection. Doppelte Elemente sind in Set nicht zulässig, das heißt, es können nicht zwei gleiche (nicht nur gleiche) Objekte vorhanden sein. Das heißt, es gibt ein A-Objekt in der Set-Sammlung und ich möchte jetzt ein B-Objekt speichern zur Set-Sammlung hinzufügen. Wenn das B-Objekt jedoch gleich dem A-Objekt ist, wird das B-Objekt nicht gespeichert.

Die Add-Methode der Set-Sammlung hat also einen booleschen Rückgabewert. Wenn die Menge kein Element enthält und die Add-Methode das Element erfolgreich hinzufügen kann, gibt sie true zurück, wenn die Menge ein Element enthält, das einem Element entspricht gleich ist, kann die Add-Methode das Element zu diesem Zeitpunkt nicht hinzufügen und das Rückgabeergebnis ist falsch. Wenn Set Elemente annimmt, können Sie nicht angeben, welche Anzahl verwendet werden soll. Sie können nur alle Elemente über die Iterator-Schnittstelle abrufen und dann jedes Element einzeln durchlaufen.

Liste stellt eine Sammlung der Reihe nach dar. Beachten Sie, dass sie nicht nach Alter, Größe, Preis usw. sortiert ist. Wenn wir die Methode add(Obje) mehrmals aufrufen, werden die jedes Mal hinzugefügten Objekte in der Reihenfolge „Wer zuerst kommt, mahlt zuerst“ sortiert, genau wie die Warteschlangenreihenfolge beim Kauf von Fahrkarten an einem Bahnhof. Manchmal können Sie auch in die Warteschlange springen, dh die Methode add(intindex,Obj e) aufrufen, um den Speicherort des aktuellen Objekts in der Sammlung anzugeben.

Ein Objekt kann wiederholt in der Liste gespeichert werden. Bei jedem Aufruf der Add-Methode wird das Objekt einmal in die Sammlung eingefügt. Tatsächlich wird das Objekt selbst nicht in der Sammlung gespeichert, sondern ein Index in der Sammlung . Wenn dieses Objekt mehrmals hinzugefügt wird, entspricht dies mehreren Indizes in der Sammlung, die auf dieses Objekt verweisen, wie in Abbildung x dargestellt. Zusätzlich zur Verwendung der Iterator-Schnittstelle, um alle Elemente der Liste abzurufen und dann jedes Element einzeln zu durchlaufen, können Sie auch get(index i) aufrufen, um klar anzugeben, welche Zahl abgerufen werden soll.

Map unterscheidet sich von List und Set. Es handelt sich um eine zweispaltige Sammlung mit einer Put-Methode, die wie folgt definiert ist: put(obj key, obj value), jedes Mal, wenn es gespeichert wird. Der Wert muss gespeichert werden, und Duplikate können nicht gespeichert werden. Diese Duplizierungsregel basiert ebenfalls auf dem Gleichheitsvergleich. Der entsprechende Wert kann entsprechend dem Schlüssel abgerufen werden, dh der Rückgabewert von get (Objektschlüssel) ist der dem Schlüssel entsprechende Wert.

Darüber hinaus können Sie auch die Kombination aller Schlüssel, die Kombination aller Werte und die Sammlung von Map.Entry-Objekten bestehend aus Schlüssel und Wert abrufen.

Liste enthält Elemente in einer bestimmten Reihenfolge und kann doppelte Elemente enthalten. Set kann keine doppelten Elemente enthalten und wird intern sortiert. Map speichert Schlüsselwertwerte und der Wert kann mehrere Werte haben.

6. Erzählen Sie uns von der Speicherleistung und den Eigenschaften von ArrayList, Vector und LinkedList.

ArrayList und Vector verwenden beide Arrays zum Speichern von Daten, sodass Elemente hinzugefügt werden können Beide ermöglichen die direkte Indexierung von Elementen, das Einfügen von Elementen erfordert jedoch Speichervorgänge wie das Verschieben von Array-Elementen. Da Vector die synchronisierte Methode (Thread-Sicherheit) verwendet, ist die Leistung jedoch gering normalerweise schlechter als ArrayList. LinkedList verwendet eine doppelt verknüpfte Liste zum Speichern von Daten, die einen Vorwärts- oder Rückwärtsdurchlauf erfordern. Beim Einfügen von Daten müssen Sie jedoch nur die Elemente vor und nach diesem Element aufzeichnen, sodass die Einfügegeschwindigkeit höher ist Schneller.

LinkedList ist auch Thread-unsicher und bietet einige Methoden, mit denen LinkedList als Stapel und Warteschlange verwendet werden kann.

7. Entfernen Sie doppelte Elemente aus einem Vektorsatz

Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
       if(!newVector.contains(obj);
             newVector.add(obj);
}

Es gibt auch eine einfache Möglichkeit, einen Satz zu verwenden, der keine doppelten Elemente zulässt:

HashSetset = new HashSet(vector);

8 Der Unterschied zwischen Collection und Collections .

Collection ist die übergeordnete Schnittstelle der Collection-Klasse. Zu den Schnittstellen, die sie erben, gehören hauptsächlich Set und List.

Collections ist eine Hilfsklasse für die Collection-Klasse. Sie stellt eine Reihe statischer Methoden zur Implementierung der Suche, Sortierung und des Threads bereit Sicherheit verschiedener Sammlungen usw.

9. Die Elemente in Set können nicht wiederholt werden. Welche Methode wird also verwendet, um zu unterscheiden, ob sie sich wiederholen?

Was ist der Unterschied zwischen ihnen? . Die Duplizierung von Elementen wird mithilfe der Methode equal() ermittelt. Der Unterschied zwischen

== und gleich ist auch eine Frage, die in der Prüfung nicht bestanden wurde. Lassen Sie uns hier darüber sprechen: Der Operator

== wird speziell verwendet, um zu vergleichen, ob die Werte zweier Variablen gleich sind. Das heißt, es wird verwendet, um die im Speicher gespeicherten Werte zu vergleichen, die den Variablen entsprechen. Ob die Werte gleich sind, Sie können nur zwei grundlegende Datentypen vergleichen oder ob zwei Referenzvariablen gleich sind Verwenden Sie den ==-Operator. Die

equals-Methode wird verwendet, um zu vergleichen, ob der Inhalt zweier unabhängiger Objekte gleich ist, genau wie beim Vergleich, ob das Aussehen zweier Personen gleich ist. Die beiden verglichenen Objekte sind unabhängig.

Zum Beispiel: Zwei neue Anweisungen erstellen zwei Objekte und verwenden dann die beiden Variablen a/b, um jeweils auf eines der Objekte zu verweisen, und ihre ersten Adressen sind unterschiedlich, nämlich a und Die Werte Die in b gespeicherten Objekte sind unterschiedlich, daher gibt der Ausdruck a==b false zurück, und der Inhalt der beiden Objekte ist gleich, sodass der Ausdruck a.equals(b) true zurückgibt.

(Verwandte Tutorial-Empfehlung: Java-Einführungs-Tutorial)

10 Welche Sammlungsklassen kennen Sie? Hauptmethode?

Die am häufigsten verwendeten Sammlungsklassen sind List und Map. Spezifische Implementierungen von List umfassen ArrayList und Vector, bei denen es sich um Listen variabler Größe handelt, die sich besser zum Erstellen, Speichern und Bearbeiten von Elementlisten aller Objekttypen eignen. Die Liste eignet sich für den Zugriff auf Elemente über einen numerischen Index.

Map bietet eine allgemeinere Methode zum Speichern von Elementen. Die Map-Sammlungsklasse wird zum Speichern von Elementpaaren (als „Schlüssel“ und „Werte“ bezeichnet) verwendet, wobei jeder Schlüssel einem Wert zugeordnet ist.

Sie alle verfügen über Methoden zum Hinzufügen, Löschen, Ändern und Überprüfen.

Für Set sind die allgemeinen Methoden Hinzufügen, Entfernen, Enthält usw.

Für Karte sind die allgemeinen Methoden Put, Entfernen, Enthält usw.

Die List-Klasse verfügt über eine Methode wie get(int index), da sie Elemente in der richtigen Reihenfolge annehmen kann, aber es gibt keine Methode wie get(int index) in der Set-Klasse. Sowohl List als auch Set können alle Elemente iterieren. Beim Iterieren müssen Sie zunächst ein Iteratorobjekt abrufen. Daher verfügen sowohl die Set- als auch die List-Klasse über eine Iteratormethode zum Zurückgeben des Iteratorobjekts. Map kann drei Sammlungen zurückgeben, eine gibt eine Sammlung aller Schlüssel zurück, die andere gibt eine Sammlung aller Werte zurück und die dritte gibt eine Sammlung von EntrySet-Objekten zurück, die aus Schlüsseln und Werten bestehen. Map verfügt auch über eine get-Methode und der Parameter ist key . Der Rückgabewert ist der Wert, der dem Schlüssel entspricht, und hängt nicht von der Fähigkeit ab, sich die Methode zu merken. Sprechen Sie einfach über die Verwendung, die auf den Unterschieden basiert die drei.

Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews – Teil des Sammlungsrahmens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen