Was ist der Unterschied zwischen einer bestellten und einer sortierten Sammlung?

132

Gibt es einen Unterschied zwischen einer sortierten und einer bestellten Sammlung?

Johanna
quelle
1
Nehmen Sie die Antworten hier nicht zu wörtlich. Während dies die Art von Definition ist, die weithin verstanden und anerkannt wird, ist es nicht die De-facto-Definition in der Computerterminologie. Zum Beispiel wird in .NET die Schnittstelle für "sortierte" Enumerable aufgerufen IOrderedEnumerable (lustig ist, dass sie in .NET nicht sehr konsistent ist. Es wird ein "Einfügereihenfolge" -Respekt im Wörterbuch in .NET aufgerufen, von OrderedDictionarydem einige glauben, dass es eine falsche Bezeichnung ist, wenn man sagt: IndexedDictionary) . Ja, in der Java-Welt (meistens auch anderswo) meinen sie, was Sie in den Antworten haben. Mehr dazu hier .
Nawfal
Wenn bei einer Implementierungsinstanz die Benennung falsch ist, ist dies kein Grund, ihren Fehler zu verbreiten. Es ist eine gute Frage mit guten Antworten. Verwenden Sie die richtige Benennung - reduziert die Verwirrung für alle, auch für Sie.
foo

Antworten:

166

Eine geordnete Sammlung bedeutet, dass die Elemente der Sammlung eine bestimmte Reihenfolge haben. Die Reihenfolge ist unabhängig vom Wert. Eine Liste ist ein Beispiel.

Eine sortierte Sammlung bedeutet, dass die Sammlung nicht nur eine Reihenfolge hat, sondern die Reihenfolge auch vom Wert des Elements abhängt. Ein SortedSet ist ein Beispiel.

Im Gegensatz dazu kann eine Sammlung ohne Reihenfolge die Elemente in beliebiger Reihenfolge verwalten. Ein Set ist ein Beispiel.

g.
quelle
1
Ist die Prioritätswarteschlange eine bestellte Sammlung?
Überaustausch
@overexchange Angesichts der obigen Definitionen wäre eine Prioritätswarteschlange in den meisten Fällen eine sortierte Sammlung, da die Priorität fast immer als Eigenschaft der Elemente in der Warteschlange definiert wird.
Cdeszaq
Wenn SortedSet von Set geerbt hat und eine is-a-Beziehung dazu hat, wie kann man dann sagen, dass Set ohne Reihenfolge ist
xpioneer
79

Eine geordnete Sammlung behält die Reihenfolge der Elemente bei, basierend auf der Reihenfolge, in der Sie Inhalte in die Sammlung einfügen / aus dieser entfernen.

Eine sortierte Sammlung hält die Elemente nach Sortierkriterien sortiert.

nr
quelle
18

Java verwendet "geordnete Sammlung", um eine Sammlung wie List zu bezeichnen, bei der sich die Sammlung (im Gegensatz zu HashSet) merkt, in welcher Reihenfolge sich die Elemente befinden sollen. Daher können Elemente an einer bestimmten "Stelle" in der Reihenfolge zur Sammlung hinzugefügt werden .

Java verwendet "sortierte Sammlung", um eine Sammlung wie SortedSet zu bezeichnen, wobei (im Gegensatz zu List) die Reihenfolge, in der der Iterator die Sammlung durchläuft, einem angegebenen Komparator oder der natürlichen Reihenfolge der Elemente entspricht.

Der Unterschied besteht also darin, ob die Reihenfolge von den Werten abhängt ("sortiert") oder eine Eigenschaft ist, die Elemente unabhängig von ihrem Wert haben ("geordnet").

Steve Jessop
quelle
1
Gute Antwort und +1 für die Erwähnung von "Java". Es ist irgendwie die akzeptierte Definition an den meisten Orten, wie OrderedDictin Python. In .NET wird jedoch die Schnittstelle für "sortierte" Enumerable aufgerufen IOrderedEnumerable. Es kommt also darauf an.
Ich
9

Ja, obwohl die Konzepte ähnlich sind.

List ist eine geordnete Sammlung: Jedes Element verfügt über einen Index, der eine Reihenfolge der Elemente bildet, sich jedoch normalerweise nicht auf eine Eigenschaft der Elemente selbst bezieht.

SortedMapund SortedSetsind sortierte Sammlungen, was bedeutet, dass die Iteration durch die Sammlung in einer Sequenz erfolgt, die von den Elementen selbst abgeleitet ist. Wenn Sie beispielsweise eine haben, werden SortedSet<String>die Zeichenfolgen nach der lexikografischen Sortierreihenfolge sortiert.

Eine bestellte Sammlung kann sortiert werden, muss es aber nicht sein (z. B. nach der Verwendung Collections.sort()), wenn die externe Reihenfolge mit der Sortierreihenfolge der Elemente identisch ist. Eine sortierte Sammlung ist immer implizit geordnet (dh es gibt immer ein "erstes" Element, und es ist immer dasselbe, solange Sie kein weiteres, kleineres hinzufügen).

Michael Borgwardt
quelle
5

Eine geordnete Sammlung ist eine Sammlung, die einen fortlaufenden Index verfolgt, in den jedes Element eingefügt wird.

Eine sortierte Sammlung ist eine geordnete Sammlung, wenn die Reihenfolge zusätzlich vom Wert des Elements abhängt, in das eingefügt werden soll. Dabei wird die Schnittstelle Comparable verwendet, mit der Sie die Sortierkriterien definieren können.

Ich hoffe es könnte helfen.

gvalenncia
quelle
2

Sortiert würde bedeuten, nach einer Implementierung von Comparable oder Comparator zu ordnen. Bestellt würde bedeuten, dass es der Einfügereihenfolge oder einer anderen Definition der Reihenfolge folgt, die konsistent und definiert ist, aber ansonsten willkürlich.

Eine sortierte Liste von Zeichenfolgen würde also nach der String.compareTo-Methode sortiert. Eine Liste kann eine Liste von Zeichenfolgen enthalten, die in beliebiger Reihenfolge eingefügt werden. Diese Reihenfolge bleibt jedoch immer gleich.

Natürlich gibt es in der Collections-Klasse Methoden zum Sortieren einer Liste.

Yishai
quelle
1

Eine sortierte Sammlung bedeutet normalerweise, dass die Elemente je nach Attribut (en) der Elemente, mit denen Algorithmen arbeiten, vom Minimalwert zum Maximalwert oder umgekehrt sortiert werden.

Für eine Interger-Sammlung kann die Sortierung von einer minimalen bis zu einer maximalen Anzahl für eine Personensammlung sein, sie kann durch die Größe von Personen oder das Gewicht von Personen usw. sortiert sein.

Wenn es um die Reihenfolge geht, bedeutet dies normalerweise die Reihenfolge des Einfügens. Die Reihenfolge kann nach dem Sortieren geändert werden

Sotondolphin
quelle
0

Sortierte Sammlung vs. bestellte Sammlung

1. Sortierte Sammlung

Eine sortierte Sammlung sortiert eine Sammlung unter Verwendung der Sortierfunktionen, die vom Java-Sammlungsframework bereitgestellt werden. Die Sortierung erfolgt im Speicher der JVM, in der Hibernate ausgeführt wird, nachdem die Daten mit dem Java-Komparator aus der Datenbank gelesen wurden.

Wenn Ihre Sammlung nicht groß ist, können Sie sie effizienter sortieren. Wie es im JVM-Speicher passiert, kann es zu einem Out of Memory-Fehler kommen.

2. Bestellung abholen

Bei der Auftragssammlung wird eine Sammlung sortiert, indem die Order-by-Klausel in der Abfrage angegeben wird, um diese Sammlung beim Abrufen zu sortieren. Wenn Ihre Sammlung sehr groß ist, können Sie sie effizienter sortieren. Es ist schnell im Vergleich zur sortierten Sammlung.

Hardikhirapara
quelle