Qual è la differenza tra una raccolta ordinata e una raccolta ordinata?


132

C'è qualche differenza tra una ordinata ed una ordinata raccolta?


1
Non prendere le risposte qui troppo alla lettera. Sebbene questo sia il tipo di definizione ampiamente compreso e riconosciuto, non è la definizione di fatto nella terminologia informatica. Ad esempio, in .NET viene chiamata l'interfaccia per l'enumerabile "ordinato" IOrderedEnumerable (cosa divertente è che non è molto coerente in .NET. Viene chiamato un dizionario di "ordine di inserzione" in .NET OrderedDictionaryche alcuni credono sia un termine improprio rispetto a dire, IndexedDictionary) . Sì, nel mondo Java (soprattutto altrove) significano ciò che hai nelle risposte. Per di più vedi qui .
nawfal,

Se qualche istanza di implementazione sbaglia la denominazione, non c'è motivo di propagare il suo errore. È una buona domanda, con buone risposte. Usa una denominazione corretta: aiuta a ridurre la confusione per tutti, incluso te stesso.
Foo

Risposte:


166

Una raccolta ordinata significa che gli elementi della raccolta hanno un ordine specifico. L'ordine è indipendente dal valore. Una lista è un esempio.

Una raccolta ordinata significa che non solo la raccolta ha un ordine, ma l'ordine dipende dal valore dell'elemento. Un SortedSet è un esempio.

Al contrario, una raccolta senza alcun ordine può mantenere gli elementi in qualsiasi ordine. Un set è un esempio.


1
La coda prioritaria è una raccolta ordinata?
scambio eccessivo il

@overexchange Date le definizioni precedenti, nella maggior parte dei casi una coda di priorità sarebbe una raccolta ordinata, poiché la priorità è quasi sempre definita come una proprietà degli elementi nella coda.
cdeszaq,

Se SortedSet ha ereditato da Set e sta avendo una relazione is-a con esso, allora come puoi dire che Set è senza alcun ordine
xpioneer

79

Una raccolta ordinata mantiene l'ordine degli elementi in base alla sequenza in cui inserisci / rimuovi oggetti dalla raccolta.

Una raccolta ordinata mantiene gli elementi ordinati in base a un criterio di ordinamento.


18

Java usa "raccolta ordinata" per indicare una raccolta come List, dove (a differenza di HashSet), la raccolta ricorda in quale ordine dovrebbero trovarsi gli elementi. Quindi gli elementi possono essere aggiunti alla raccolta in un particolare "luogo" nell'ordine .

Java utilizza "raccolta ordinata" per indicare una raccolta come SortedSet, dove (diversamente dall'elenco), l'ordine in cui l'iteratore attraversa la raccolta è conforme a un comparatore specificato o all'ordine naturale degli elementi.

Quindi la differenza è se l'ordinamento dipende dai valori ("ordinati") o è una proprietà che gli elementi hanno indipendentemente dal loro valore ("ordinato").


1
Buona risposta e +1 per menzionare "Java". È un po ' la definizione accettata anche in molti luoghi, come OrderedDictin Python. Ma in .NET viene chiamata l'interfaccia per l'enumerabile "ordinato" IOrderedEnumerable. Quindi dipende.
Sto

9

Sì, anche se i concetti sono simili.

List è una raccolta ordinata: ogni elemento ha un indice, che forma un ordinamento degli elementi, ma di solito non è correlato a nessuna proprietà degli elementi stessi.

SortedMape SortedSetsono raccolte ordinate, il che significa che l'iterazione attraverso la raccolta avverrà in una sequenza derivata dagli elementi stessi. Ad esempio, se si dispone di un, SortedSet<String>le stringhe verranno ordinate in base all'ordinamento lessicografico.

Una raccolta ordinata può essere ordinata ma non deve essere (ad es. Dopo l'uso Collections.sort()) quando l'ordinamento esterno è identico all'ordinamento degli elementi. Una raccolta ordinata viene sempre ordinata in modo implicito (ovvero esiste sempre un "primo" elemento, ed è sempre la stessa, purché non ne si aggiunga un'altra più piccola).


5

Una raccolta ordinata è una raccolta che tiene traccia di un indice consecutivo in cui è inserito ogni elemento.

Una raccolta ordinata è una raccolta ordinata quando l'ordine dipende ulteriormente dal valore dell'elemento da inserire, durante l'uso dell'interfaccia Comparable che fornisce un metodo per definire i criteri di ordinamento.

Spero possa essere d'aiuto.


2

Ordinati implicherebbe l'ordinamento secondo un'implementazione di Comparable o Comparator. Ordinato implicherebbe che sta seguendo l'ordine di inserimento o qualche altra definizione di ordine coerente e definita, ma altrimenti arbitraria.

Quindi un elenco ordinato di stringhe verrebbe ordinato secondo il metodo String.compareTo. Un elenco potrebbe contenere un elenco di stringhe inserite in ordine arbitrario, ma tale ordine rimarrà sempre lo stesso.

Naturalmente ci sono metodi nella classe Collezioni per ordinare un elenco.


1

Una raccolta ordinata di solito indica che gli elementi sono ordinati dal valore minimo al valore massimo o viceversa a seconda degli attributi degli elementi su cui funzionano gli algoritmi.

per le raccolte di un numero intero, l'ordinamento può essere compreso tra il numero minimo e il numero massimo per una raccolta di persone, può essere influenzato dall'altezza delle persone o dal peso delle persone, ecc.

Quando si parla di ordine, di solito significa l'ordine di inserimento. L'ordine può essere modificato dopo l'ordinamento


0

Raccolta ordinata vs. raccolta ordinata

1. Raccolta ordinata

Una raccolta ordinata sta ordinando una raccolta utilizzando le funzionalità di ordinamento fornite dal framework delle raccolte Java. L'ordinamento avviene nella memoria di JVM che esegue Hibernate, dopo che i dati sono stati letti dal database utilizzando java comparator.

Se la tua collezione non è grande, sarà un modo più efficiente per ordinarla. Come accade nella memoria jvm, può generare un errore di memoria esaurita.

2. Ordine di raccolta

La raccolta ordini sta ordinando una raccolta specificando la clausola order-by nella query per ordinare questa raccolta al momento del recupero. Se la tua collezione è molto grande, sarà un modo più efficiente per ordinarla. È veloce rispetto alla raccolta ordinata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.