2012-04-02 15 views
11

Eventuali duplicati:
When should I use a List vs a LinkedList
What is a great resource for learning about the implementation details of .NET generic collections?È Lista <T> una lista collegata?

È System.Collections.Generic.List<T> un tipo di linked list(non il LinkedList<T> classe)?

Un lista collegata è una struttura di dati costituito da un gruppo di nodi che insieme rappresentano una sequenza. Sotto la forma più semplice, ciascun nodo è composto da un dato e un riferimento (in altre parole, un link) al nodo successivo nella sequenza.

Linear Linked List
Una lista concatenata cui nodi contenere due campi: un valore intero e un collegamento al nodo successivo.
L'ultimo nodo è collegato a un terminatore utilizzato per indicare la fine dell'elenco.

wikipedia.org

Se lo è, che tipo di lista collegata è?

+1

Iftode @Adrian: Questa domanda non sta chiedendo quando scegliere 'Lista ' 'over LinkedList '. – BoltClock

+0

@ BoltClock'saUnicorn, si, avrei dovuto postare questo commento come commento –

risposta

23

No, List<T> è supportato da un array - è essenzialmente una versione generica di ArrayList da .NET 1.0. Dalla documentazione:

La classe List<T> è l'equivalente generico della classe ArrayList. Implementa l'interfaccia generica IList<T> utilizzando una matrice cui dimensione è aumentata dinamicamente come richiesto.

Si noti che a causa del supporto di un array, il suo accesso tramite gli indicizzatori è O (1) anziché O (N) per un elenco collegato.

Se si desidera una lista collegata, utilizzare LinkedList<T>. Si noti che questo è un doppiamente lista linked. Non credo .NET espone un singolarmente tipo di elenco linked.

+1

Vuoi dire che è gestito in memoria come un array? Ma come posso aggiungere un numero indefinito di oggetti al suo interno? E posso rimuovere un oggetto da esso? –

+2

@JohnIsaiahCarmona: Voglio dire che ha una variabile di matrice internamente. L'array ha una dimensione fissa (come * tutti * gli array sono in .NET) ma quando l'elenco deve crescere, viene creato un nuovo array e gli elementi esistenti vengono copiati. Allo stesso modo, quando rimuovi un oggetto, copia semplicemente il resto degli elementi nella loro nuova posizione corretta. –

4

List<T>, da un punto di vista tecnico, è NON un tipo di elenco collegato.

Se si vuole avere una lista collegata in C#:

  • utilizzare il (doppio-legati liste per) built-in LinkedList<T> tipo
  • o creare un'implementazione del proprio (se si vogliono un singolarmente legata uno) - here's an example
Problemi correlati