this being the case, can anyone explain why not?
L'ottimizzatore non può compensare perché l'ottimizzatore funziona in fase di compilazione. Non può sapere come verranno utilizzate le raccolte, quindi non può ottimizzare le raccolte per le operazioni più comuni. Peggio ancora, le operazioni comuni potrebbero non essere le più importanti. Supponiamo di fare 1000 inserti, ma tutti esistono per consentirvi di eseguire una rapida ricerca in un secondo momento. Gli inserti potrebbero non avere importanza perché sono fatti in background mentre la tua app viene caricata. Non c'è modo per l'ottimizzatore di sapere.
would this be a massive performance hit
Come con tutte le cose, dipende. Lascia che provi a fornire una spiegazione rapida e di alto livello perché .
La ragione per cui non può esserci una struttura di dati universale è a causa di compromessi. Se esistesse una struttura che fosse veloce da inserire, veloce da cercare, rapida da cancellare, veloce da ordinare, efficiente in memoria, thread-safe, senza penalizzazioni di ridimensionamento ... beh, sicuramente la useremmo. Il problema è che se si ottimizza una struttura dati per esempio, inserzioni rapide, qualcos'altro ne risentirà. Questa tabella (grazie a questa domanda ) mostra quali sono tutti quei compromessi.
E quei compromessi sono piuttosto significativi. Avere codice fare qualcosa di comune in O(n)
(o peggio) piuttosto che O(1)
è ciò che prende il tempo di esecuzione della tua app da millisecondi a secondi e da secondi a minuti o ore.
Quindi sì, è necessario avere tutte queste raccolte.
Detto questo, spesso non importa se li usi . Ad esempio, in C # c'è List<T>
che è "abbastanza buono" per qualsiasi raccolta di base e Dictionary<K,V>
che è "abbastanza buono" quando hai bisogno di una ricerca. Poche applicazioni devono essere altamente performanti, e in quelle app una piccola parte degli account app per la maggior parte del runtime. Usare le collezioni predefinite fino a quando il tuo profiler ti dice in modo diverso è un buon approccio per i principianti, purché tu sappia che esistono le altre collezioni e perché esistono.