Sto scrivendo un servizio in cui le prestazioni sono essenziali e non sono sicuro di quale sia la cosa più veloce. Ho alcuni oggetti (50-200) che hanno ciascuno un ID in loro (ints, ad esempio 84397 o 23845). Sarebbe più veloce avere un dizionario, un elenco di coppie KeyValue o un elenco con gli indici impostati sugli ID con il resto con valori nulli o un array con la stessa idea?Dizionario, elenco o matrice?
risposta
Dipende dall'operazione che si desidera eseguire. Supponiamo che tu voglia trovare un oggetto con un dato ID.
- Il enorme approccio matrice è più veloce: accesso
myArray[84397]
è una costante di tempo di funzionamento O (1). Certo, questo approccio richiede più memoria. - Il dizionario è quasi altrettanto veloce ma richiede meno memoria, poiché utilizza uno hash table interno.
- La lista di coppie approccio è il più lento, dal momento che potrebbe essere necessario attraversare l'intero elenco per trovare la voce, che produce O (n) complessità.
Quindi, nella tua situazione, sceglierei il dizionario, a meno che le prestazioni marginalmente migliori dell'enorme array siano davvero rilevanti nel tuo caso.
Grazie per l'aiuto, userò il dizionario (assumendo marginalmente significa qualcosa come 1ms più veloce). – SBoss
Hai scritto "dizionario richiede meno memoria" - non intendevi scrivere richiede più memoria, dal momento che usa internamente una tabella hash? – BornToCode
@BornToCode: richiede meno memoria rispetto all'opzione precedente, l'enorme array. L'enorme array richiede * spazi di archiviazione * maximumID *, mentre il dizionario richiede solo * alcuni punti di spazio costante * numberOfElements *. – Heinzi
Dictionary<TKey, TValue>
utilizza internamente una tabella hash quindi penso che sarebbe la più veloce.
+1 Questo è esattamente il motivo per cui esiste il dizionario. – James
Un HashTable sarebbe meglio? – SBoss
@SBoss - Il dizionario generico non usa un 'HashTable' internamente, quindi no. Un 'HashTable' è considerevolmente più lento quando usi ValueTypes, come pensi di fare con il tuo' int'. –
Dictionary versus List Lookup time
Inoltre, per una spiegazione più dettagliata delle diverse collezioni, controlla this question.
È possibile utilizzare anche gli hashtables. Dizionario internamente usando comunque. ma il dizionario ha il vantaggio che si tratta di un tipo GENERICO che offre la sicurezza del tipo.
qui è diverso thread Dictionary Vs HashTable Spero che ti aiuta a decidere.
Praveen
- 1. Sia hash che elenco indicizzato o matrice?
- 2. Elenco di elenchi vs dizionario
- 3. Elenco/dizionario generico
- 4. Crea elenco del dizionario Python
- 5. Python: Elenco delle liste dizionario
- 6. Passaggio di una matrice o elenco a @Pathvariable - Spring/Java
- 7. coverting Elenco dei dizionario per DataTable
- 8. Converti un elenco di tuple nel dizionario
- 9. File elenco parole per dizionario Oxford
- 10. Creare un elenco di dizionario dinamico python
- 11. Write elenco di dizionario in CSV Python
- 12. Converti dizionario in elenco <KeyValuePair>
- 13. "elenco articoli" o "elenco elementi"
- 14. Memory Cache o dizionario simultaneo?
- 15. Dizionario con delegato o switch?
- 16. Classe dizionario PHP? o alternativa?
- 17. R: Elenco degli indici di matrice binaria
- 18. Come creare un elenco di matrice R
- 19. In Python, quando utilizzare un dizionario, un elenco o un set?
- 20. Creare o aggiungere a un elenco in un dizionario - può essere abbreviato?
- 21. pitone: scorrendo un dizionario con elenco di valori
- 22. range (len (elenco)) o enumerate (elenco)?
- 23. conversione di un dizionario 2d a una matrice NumPy
- 24. Json.Net - Serializza dizionario come matrice (di coppie di valori chiave)
- 25. Codifica valore-chiave (KVC) con matrice/dizionario in Swift
- 26. ordinare un elenco di dizionario fornito un ordine
- 27. couchdb o filtrano matrice chiave
- 28. Dizionario .NET: ottieni o crea nuovo
- 29. Commenti Python Impossibile utilizzare "" "o" '"nel dizionario
- 30. Dizionario Python o mappa in chiaro
Hai provato a eseguire una semplice applicazione di test? –
L'ho avviato, ma ho pensato che chiedere sarebbe stato più efficiente (per i futuri utenti e per me). – SBoss
Quali operazioni devi eseguire con tali oggetti? Cerca per chiave? Cerca valori? Molti inserti? Rimozione delle chiavi? – Marco