Heim  >  Artikel  >  Java  >  Einführung in die Verwendung und Unterschiede von Set, List und Map in Java

Einführung in die Verwendung und Unterschiede von Set, List und Map in Java

高洛峰
高洛峰Original
2017-01-22 15:19:461664Durchsuche

Sammlungsschnittstelle: Sammlung ist die grundlegendste Sammlungsschnittstelle, die allgemeine Methoden deklariert, die auf JAVA-Sammlungen anwendbar sind (einschließlich nur Set und List). Sowohl Set als auch List erben Collection, Map

Collection-Schnittstellenmethoden:

boolean add(Object o): Füge einen Verweis auf ein Objekt zur Collection hinzu
void clear(): Alle löschen Objekte in der Sammlung enthalten keine Verweise mehr auf diese Objekte
boolean isEmpty(): Bestimmen Sie, ob die Sammlung leer ist
boolean contains(Object o): Bestimmen Sie, ob die Sammlung Verweise auf bestimmte Objekte enthält
Iterartor iterator( ): Gibt ein Iterator-Objekt zurück, das zum Durchlaufen der Elemente in der Sammlung verwendet werden kann
boolean remove(Object o): Entfernt einen Verweis auf ein Objekt aus der Sammlung

int size(): Gibt die zurück Sammlung Die Anzahl der Elemente in

Object[] toArray(): Gibt ein Array zurück, das alle Elemente in der Sammlung enthält

Über: Die Methoden Iterator() und toArray() werden beide für Sammlungen verwendet Alle Elemente in der Sammlung. Ersteres gibt ein Iterator-Objekt zurück und letzteres gibt ein Array zurück, das alle Elemente in der Sammlung enthält.

Die Iterator-Schnittstelle deklariert die folgenden Methoden:

hasNext(): Bestimmen Sie, ob die Elemente in der Sammlung durchlaufen wurden. Wenn nicht, geben Sie true zurück.
next(): Geben Sie das nächste zurück element
remove(): Entfernen Sie das vorherige Element, das von der next()-Methode zurückgegeben wurde, aus der Sammlung.

Set (Set): Set ist die einfachste Art von Set. Die Objekte in der Sammlung sind nicht auf eine bestimmte Weise geordnet und es gibt keine doppelten Objekte. Die Set-Schnittstelle implementiert hauptsächlich zwei Implementierungsklassen:

HashSet: Die HashSet-Klasse greift gemäß dem Hash-Algorithmus auf Objekte im Satz zu, und die Zugriffsgeschwindigkeit ist relativ hoch

TreeSet: Die TreeSet-Klasse implementiert SortedSet-Schnittstelle, die Objekte in einer Sammlung sortieren kann.

Verwendung von Set: Speichert Verweise auf Objekte, keine doppelten Objekte

Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);

System.out.println(set.size());// Druckt die Anzahl der Objekte in der Sammlung als 2.
Wie bestimmt die add()-Methode von Set, ob das Objekt in der Sammlung gespeichert wurde?

boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}

Liste (Liste): Das Merkmal der Liste besteht darin, dass ihre Elemente linear gespeichert werden und wiederholte Objekte in der Sammlung gespeichert werden können.

Zu den Hauptimplementierungsklassen der List-Schnittstelle gehören:
ArrayList(): stellt ein Array dar, dessen Länge geändert werden kann. Auf Elemente kann nach dem Zufallsprinzip zugegriffen werden, und das Einfügen und Löschen von Elementen in ArrayList() ist langsam.
LinkedList(): Verwendet die Datenstruktur einer verknüpften Liste in der Implementierung. Das Einfügen und Löschen erfolgt schnell, der Zugriff ist langsam.

Für den wahlfreien Zugriff auf die Liste werden nur zufällig Elemente abgerufen, die sich an bestimmten Positionen befinden. Die Methode get(int index) von List gibt das Objekt an der durch den Parameter index in der Sammlung angegebenen Indexposition zurück, und der Index beginnt bei „0“. Die beiden grundlegendsten Methoden zum Abrufen aller Objekte in einer Sammlung:

1: for-Schleife und get()-Methode:

for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}

2: Verwendung von Iteratoren (Iterator ):

Iterator it=list.iterator();
while(it.hashNext){
System.out.println(it.next);
}

Map: Map ist eine Sammlung von Schlüsselobjekten und Wertobjekten. Jedes Element davon enthält ein Paar von Schlüsselobjekten und Wertobjekten.
Map erbt nicht von der Collection-Schnittstelle, solange das Schlüsselobjekt angegeben ist, wird das entsprechende Wertobjekt zurückgegeben.

Gemeinsame Methoden von Map:

1 Operationen zum Hinzufügen und Löschen:

Object put(Object key, Object value): Elemente zur Sammlung hinzufügen
Object remove( Objektschlüssel): Elemente im Zusammenhang mit SCHLÜSSEL entfernen
void putAll(Map t): Alle Elemente aus einem bestimmten Bild zu diesem Bild hinzufügen
void clear(): Alle Zuordnungen aus dem Bild entfernen

2 Abfragevorgang:

Object get(Object key): Ruft den Wert ab, der sich auf den Schlüsselwortschlüssel bezieht. Die Schlüsselobjekte in der Map-Sammlung dürfen nicht wiederholt werden. Mit anderen Worten: Das Ergebnis des Vergleichs zweier Schlüsselobjekte mit der Methode equal() ist jedoch falsch. Mehrere Schlüssel können jedoch ausschließlich demselben Wertobjekt zugeordnet werden.

Sammlungen: Sammlungsdienstprogrammklasse. Collections bietet praktische statische Methoden für JAVA-Sammlungen

Zusammenfassung:

Die oben genannten sind die am häufigsten verwendeten JAVA-Sammlungen. Weitere spezifische Informationen finden Sie hier Zur JDK-Hilfedokumentation. Haha, es gibt viele Anwendungen von Map, insbesondere diese Collections bietet viele praktische Methoden von List/Map, die für die tägliche Entwicklung sehr nützlich sind.

boolean enthältKey(Objektschlüssel): Bestimmen Sie, ob der Schlüsselwortschlüssel im Bild vorhanden ist
boolean enthältValue(Objektwert): Bestimmen Sie, ob der Wert value im Bild vorhanden ist
int size(): Rückgabe zum aktuellen Bild Anzahl der Zuordnungen
boolean isEmpty(): Ermitteln Sie, ob im Bild Zuordnungen vorhanden sind

List speichert Objekte in der Reihenfolge, in der sie eingegeben wurden, ohne Sortier- oder Bearbeitungsvorgänge. Set akzeptiert jedes Objekt nur einmal und verwendet seine eigene interne Sortiermethode (normalerweise interessiert Sie nur, ob ein Element zum Set gehört, nicht seine Reihenfolge – andernfalls sollten Sie eine Liste verwenden).
Map speichert auch eine Kopie jedes Elements, diese basiert jedoch auf „Schlüssel“. Map verfügt auch über eine integrierte Sortierung, sodass die Reihenfolge, in der Elemente hinzugefügt werden, egal ist. Wenn die Reihenfolge, in der Elemente hinzugefügt werden, für Sie wichtig ist, sollten Sie LinkedHashSet oder LinkedHashMap verwenden.

Funktionsmethoden von List:
Es gibt tatsächlich zwei Typen: Der eine ist der grundlegende ArrayList, der den Vorteil hat Die andere ist die leistungsfähigere LinkedList, die nicht für schnellen Direktzugriff konzipiert ist, sondern über einen allgemeineren Satz von Methoden verfügt.

Liste: Die Reihenfolge ist das wichtigste Merkmal der Liste: Sie stellt sicher, dass die spezifische Reihenfolge der Elemente beibehalten wird. List fügt der Collection viele Methoden hinzu und ermöglicht das Einfügen und Entfernen von Elementen aus der Mitte der Liste (dies wird nur für LinkedList empfohlen). Eine Liste kann einen ListIterator generieren, der zum Durchlaufen der Liste in zwei Richtungen verwendet werden kann Es können auch Elemente aus der Mitte der Liste eingefügt und verschoben werden.
ArrayList: Durch Array implementierte Liste. Ermöglicht schnellen Direktzugriff auf Elemente, fügt Elemente jedoch sehr langsam aus der Mitte der Liste ein und entfernt sie. ListIterator sollte nur zum Durchlaufen der ArrayList von hinten nach vorne verwendet werden, nicht zum Einfügen und Entfernen von Elementen. Denn das ist viel teurer als LinkedList.
LinkedList: Der sequentielle Zugriff ist optimiert und der Aufwand für das Einfügen und Löschen in der Mitte der Liste ist nicht groß. Der wahlfreie Zugriff ist relativ langsam. (Verwenden Sie stattdessen ArrayList.) Verfügt außerdem über die folgenden Methoden: addFirst(), addLast(), getFirst(), getLast(), RemoveFirst() und RemoveLast(), die (in keiner Schnittstelle oder Basisklasse definiert) LinkedList erstellen können als Stack, Queue und Deque verwendet werden.

Funktionsmethoden von Set:
Set hat genau die gleiche Schnittstelle wie Collection, verfügt also im Gegensatz zu den beiden verschiedenen Listen zuvor über keine zusätzlichen Funktionen. Tatsächlich ist Set eine Sammlung, aber sein Verhalten ist anders. (Dies ist eine typische Anwendung von Vererbung und polymorphen Ideen: Darstellung unterschiedlicher Verhaltensweisen.) Set speichert keine doppelten Elemente (was die Beurteilung betrifft, ob die Elemente gleich sind, ist dies verantwortungsvoller)

Set: Each Das in Set gespeicherte Element muss eindeutig sein, da Set keine doppelten Elemente speichert. Dem Set hinzugefügte Elemente müssen die Methode equal() definieren, um die Einzigartigkeit des Objekts sicherzustellen. Set und Collection haben genau die gleiche Schnittstelle. Die Set-Schnittstelle garantiert nicht, dass die Reihenfolge der Elemente beibehalten wird.
HashSet: Set für die schnelle Suche. In HashSet gespeicherte Objekte müssen hashCode() definieren.
TreeSet: Ein Set, das die Reihenfolge speichert. Die unterste Ebene ist eine Baumstruktur. Verwenden Sie es, um eine geordnete Sequenz aus einem Set zu extrahieren.

LinkedHashSet: Hat die Abfragegeschwindigkeit von HashSet und verwendet intern eine verknüpfte Liste, um die Reihenfolge der Elemente (die Einfügungsreihenfolge) beizubehalten. Wenn Sie also einen Iterator zum Durchlaufen der Menge verwenden, werden die Ergebnisse in der Reihenfolge angezeigt, in der die Elemente eingefügt wurden.

Funktionsmethoden von Map:

Die Methode put(Objektschlüssel, Objektwert) fügt einen „Wert“ (was Sie erhalten möchten) und den mit dem „Wert“ verbundenen „Schlüssel“ hinzu. ) (zum Suchen verwenden). Die Methode get(Object key) gibt den „Wert“ zurück, der dem angegebenen „Schlüssel“ zugeordnet ist. Mit „containsKey()“ und „containsValue()“ können Sie testen, ob die Map einen bestimmten „Schlüssel“ oder „Wert“ enthält.
Die Standard-Java-Klassenbibliothek enthält mehrere verschiedene Maps: HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap. Sie haben alle die gleiche grundlegende Schnittstellenkarte, aber ihr Verhalten, ihre Effizienz, ihre Sortierstrategie, ihr Lebenszyklus gespeicherter Objekte und ihre Strategien zur Bestimmung der „Schlüssel“-Äquivalenz sind unterschiedlich.
Ausführungseffizienz ist ein großes Problem für Map. Wenn Sie sich ansehen, was get() macht, werden Sie verstehen, warum die Suche nach einem „Schlüssel“ in einer ArrayList ziemlich langsam ist. Und hier verbessert HashMap die Geschwindigkeit. HashMap verwendet spezielle Werte, sogenannte Hash-Codes, um die langsame Suche nach Schlüsseln zu ersetzen.
„Hash-Code“ ist ein „relativ eindeutiger“ int-Wert, der zur Darstellung eines Objekts verwendet wird. Er wird durch Konvertierung bestimmter Informationen über das Objekt generiert. Alle Java-Objekte können Hash-Codes generieren, da hashCode() eine in der Basisklasse Object definierte Methode ist.
HashMap verwendet den hashCode() des Objekts für eine schnelle Abfrage. Dieser Ansatz kann die Leistung erheblich verbessern.

Map: Behält die Korrelation von „Schlüssel-Wert-Paaren“ bei und ermöglicht Ihnen die Suche nach „Werten“ nach „Schlüssel“

HashMap: Map basiert auf einer Hash-Tabellenimplementierung. Die Kosten für das Einfügen und Abfragen von Schlüssel-Wert-Paaren sind festgelegt. Die Kapazität und der Ladefaktor können über den Konstrukteur eingestellt werden, um die Leistung des Containers anzupassen.
LinkedHashMap: Ähnlich wie HashMap, aber beim Durchlaufen ist die Reihenfolge, in der die „Schlüssel-Wert-Paare“ erhalten werden, ihre Einfügungsreihenfolge oder die am wenigsten kürzlich verwendete Reihenfolge (LRU). Nur geringfügig langsamer als HashMap. Der iterative Zugriff ist schneller, da er eine verknüpfte Liste verwendet, um die interne Reihenfolge aufrechtzuerhalten.
TreeMap: Implementierung basierend auf der rot-schwarzen Baumdatenstruktur. Beim Anzeigen von „Schlüsseln“ oder „Schlüssel-Wert-Paaren“ werden diese sortiert (die Reihenfolge wird durch Comparabel oder Comparator bestimmt). Das Besondere an TreeMap ist, dass die Ergebnisse sortiert sind. TreeMap ist die einzige Map mit einer subMap()-Methode, die einen Teilbaum zurückgeben kann.
WeakHashMap: Schwache Schlüssel-Map, die in der Map verwendeten Objekte dürfen auch freigegeben werden: Dies dient der Lösung spezieller Probleme. Wenn außerhalb der Karte kein Verweis auf einen „Schlüssel“ vorhanden ist, kann dieser „Schlüssel“ vom Garbage Collector recycelt werden.

IdentifyHashMap: Eine Hash-Map, die == anstelle von equal() verwendet, um „Schlüssel“ zu vergleichen. Entwickelt, um spezielle Probleme zu lösen.

Weitere verwandte Artikel zur Verwendung und den Unterschieden von Set, List und Map in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn