Was ist der Unterschied zwischen Sammlung und Liste in Java?

153

Was ist der Unterschied zwischen Collectionund Listin Java? Wann soll ich welche verwenden?

Truong Ha
quelle
öffentliche Schnittstelle Liste erweitert Sammlung {}
rai.skumar

Antworten:

263

Zunächst einmal: a Listist a Collection. Es ist jedoch eine spezialisierte Collection.

A Collectionist genau das: eine Sammlung von Gegenständen. Sie können Dinge hinzufügen, Dinge entfernen, über Dinge iterieren und abfragen, wie viel Zeug darin ist.

A Listfügt die Informationen zu einer definierten Folge von Dingen hinzu: Sie können das Element an Position n erhalten , Sie können ein Element an Position n hinzufügen , Sie können das Element an Position n entfernen .

In a können CollectionSie das nicht tun: "Das 5. Element in dieser Sammlung" ist nicht definiert, da es keine definierte Reihenfolge gibt.

Es gibt auch andere spezialisierte Sammlungen, zum Beispiel eine, Setdie die Funktion hinzufügt, dass sie niemals zweimal dasselbe Element enthält.

Joachim Sauer
quelle
9
Ja, Liste ist eine geordnete Spezialisierung der Sammlung (aber nicht sortiert) +1
atamanroman
2
List in Java erweitert die Collections-Oberfläche und erstellt indizierte Funktionen, die beim positionsbasierten Abruf- und Entfernungsverhalten helfen
reibungslose
188

Collectionist die Root-Schnittstelle zur Hierarchie der Java-Sammlungen. Listist eine Unterschnittstelle, die eine geordnete Sammlung definiert, andere Unterschnittstellen, Queuedie typischerweise Elemente speichern, die zur Verarbeitung bereit sind (z . B. Stapel ).

Das folgende Diagramm zeigt die Beziehung zwischen den verschiedenen Java-Sammlungstypen:

Java-Sammlungen

Krock
quelle
1
Ich mag Ihr Bild wirklich, ich habe es bei der Vorbereitung auf SCJP gesehen, aber heutzutage fast alles vergessen.
Truong Ha
1
Ich muss zugeben, dass dieses Bild von diesem Blog abgeworben wurde . Auch ich habe zum ersten Mal ein solches Diagramm im K & B SCJP-Buch gesehen .
Rock
Sie können viel aus dem scjp-Zertifikat lernen, die meisten Bücher zu diesem Thema sind fantastisch :)
atamanroman
Ich denke Mapist nicht ein Collection.
Giannis Christofakis
7

Java API ist die beste Antwort darauf

Sammlung

Die Stammschnittstelle in der Sammlungshierarchie. Eine Sammlung repräsentiert eine Gruppe von Objekten, die als ihre Elemente bezeichnet werden. Einige Sammlungen erlauben doppelte Elemente, andere nicht. Einige sind bestellt und andere ungeordnet. Das JDK bietet keine direkten Implementierungen dieser Schnittstelle: Es bietet Implementierungen spezifischerer Subschnittstellen wie Set und List. Diese Schnittstelle wird normalerweise verwendet, um Sammlungen weiterzugeben und dort zu bearbeiten, wo maximale Allgemeinheit gewünscht wird.

Liste (erweitert Sammlung)

Eine bestellte Sammlung (auch als Sequenz bekannt). Der Benutzer dieser Schnittstelle hat eine genaue Kontrolle darüber, wo in der Liste jedes Element eingefügt wird. Der Benutzer kann über seinen ganzzahligen Index (Position in der Liste) auf Elemente zugreifen und nach Elementen in der Liste suchen.

Im Gegensatz zu Sets erlauben Listen normalerweise doppelte Elemente. Formalerweise erlauben Listen typischerweise Paare von Elementen e1 und e2, so dass e1.equals (e2), und sie erlauben typischerweise mehrere Nullelemente, wenn sie überhaupt Nullelemente zulassen. Es ist nicht unvorstellbar, dass jemand eine Liste implementieren möchte, die Duplikate verbietet, indem er Laufzeitausnahmen auslöst, wenn der Benutzer versucht, sie einzufügen. Wir erwarten jedoch, dass diese Verwendung selten ist.

Eugene Ryzhikov
quelle
3

Liste und Satz sind zwei Unterklassen der Sammlung.

In List sind die Daten in einer bestimmten Reihenfolge.

In Set kann es nicht zweimal dieselben Daten enthalten.

In Collection werden nur Daten ohne bestimmte Reihenfolge gespeichert und können doppelte Daten enthalten.

Neeraj Bansal
quelle
2

Collection ist eine übergeordnete Schnittstelle, die Java-Objekte beschreibt, die Sammlungen anderer Objekte enthalten können. Es ist nicht sehr spezifisch, wie auf sie zugegriffen wird, ob mehrere Kopien desselben Objekts in derselben Sammlung vorhanden sein können oder ob die Reihenfolge wichtig ist. Liste ist speziell eine geordnete Sammlung von Objekten. Wenn Sie Objekte in einer bestimmten Reihenfolge in eine Liste einfügen, bleiben sie in dieser Reihenfolge.

Die Entscheidung, wo diese beiden Schnittstellen verwendet werden sollen, ist viel weniger wichtig als die Entscheidung, welche konkrete Implementierung Sie verwenden. Dies hat Auswirkungen auf die zeitliche und räumliche Leistung Ihres Programms. Wenn Sie beispielsweise eine Liste wünschen, können Sie eine ArrayList oder eine LinkedList verwenden, von denen jede Auswirkungen auf die Anwendung hat. Für andere Sammlungstypen (z. B. Sets) gelten ähnliche Überlegungen.

Gian
quelle
2

Collection ist die Super-Schnittstelle von List, sodass jede Java-Liste auch eine Instanz von Collection ist. Sammlungen können nur nacheinander (und in keiner bestimmten Reihenfolge) iteriert werden, während eine Liste über die get(int index)Methode den Zugriff auf ein Element an einer bestimmten Position ermöglicht .

Daff
quelle
2

Sammlung ist die Hauptschnittstelle der Java-Sammlungshierarchie und Liste (Sequenz) ist eine der Unterschnittstellen, die eine geordnete Sammlung definiert.

Ramya
quelle