Quale è meglio usare l’array o l’elenco ?

Mi stavo chiedendo quale tipo avrebbe prestazioni migliori e quale pensi dovrebbe essere usato.

Ad esempio, ho un elenco di stringhe che non conoscono il numero di elementi di cui ho bisogno, quindi la funzione .Add (String) è davvero comoda. Posso aggiungere nuove stringhe alla lista in qualsiasi momento facilmente.

Quali sono i vantaggi / svantaggi dell’utilizzo di ciascuno?

Sono elencati i nuovi array?

Più contesto è davvero necessario per rispondere correttamente alla domanda:

In un’API pubblica , dovresti provare a utilizzare tipi di raccolta astratti, in modo da poter modificare l’implementazione interna in un secondo momento, se necessario.

  • Se la raccolta non deve essere modificata dal mondo esterno, utilizzare IEnumerable .
  • Se la raccolta verrà modificata dal mondo esterno, utilizzare ICollection .
  • Se è richiesto l’accesso indicizzato, utilizzare IList .

In un’implementazione privata , non è altrettanto importante utilizzare i tipi astratti:

  • Se hai bisogno di un accesso indicizzato e conosci la dimensione finale, usa T[] o List .
  • Se è necessario l’accesso indicizzato e non si conosce la dimensione finale, utilizzare List .
  • Se si intende accedere a elementi in un modello LIFO, utilizzare Stack .
  • Se si prevede di accedere a elementi in un modello FIFO, utilizzare Queue .
  • Se è necessario accedere agli elementi all’inizio e alla fine dell’elenco, ma non nel mezzo, utilizzare LinkedList .
  • Se non vuoi duplicati, usa HashSet .

In .NET 4.0 hai qualche altra scelta, ma quelle sono le basi.

List è implementato utilizzando un array String[] .

Se non sai quanti elementi avrai, usa List

È ansible fornire il numero stimato (o massimo) di elementi previsti nel parametro del costruttore di capacità ( new List(10) ), questa sarà la dimensione iniziale dell’array sottostante.

Quando Add() un elemento e non c’è spazio per questo elemento, l’array sottostante viene copiato in un nuovo array di dimensioni doppie.

Cosa faccio: quando conosco la dimensione esatta della collezione e so che non cambierò la dimensione della collezione, io uso un array ( String[] ). Altrimenti uso una List .

A proposito, questo vale per qualsiasi tipo e non solo per String .

Dipende dallo scenario di utilizzo, MA è anche una micro-ottimizzazione finché non hai individuato un collo di bottiglia tramite il profiling. Usa quello che si adatta meglio all’utilizzo.

Utilizza Elenco <> nella maggior parte dei casi e non preoccuparti delle prestazioni. C’è una buona possibilità che tu possa passare attraverso tutta la tua carriera e non abbia mai bisogno di sintonizzare le prestazioni convertendo un elenco <> in un array.

Nella maggior parte degli scenari la differenza di prestazioni non è apprezzabile, quindi utilizzerei List poiché fornisce molte più funzionalità che potrebbero essere utili in diverse situazioni.

Se non si conosce la dimensione degli elementi da aggiungere, andare sempre per List di matrice di stringhe.

Se hai bisogno di dimensionamento dinamico, vai con List .

Se sei preoccupato per le prestazioni, ti suggerisco di iniziare con List e vedere se c’è davvero un problema. Usa gli array internamente quindi penso che, per la maggior parte, non ci dovrebbero essere problemi di prestazioni.

Se si dispone di una raccolta di dimensioni statiche, è comunque ansible utilizzare string[] .

Ovviamente dipende dall’applicazione, ma in circostanze List (o anche solo IEnumerable è preferibile.