List<T> Warum Array ?

colblake

Erfahrenes Mitglied
Hallo,

ich schau mir gerade mit ILSpy die Implementation der Generischen Liste (List<T>) an und wundere mich. Hinter der Liste steckt doch wieder ein einfaches Array:

C#:
private T[] _items;


welches bei Überlauf komplett in ein neues, größeres Array kopiert wird. Bislang dachte ich, dass es besser wäre eine verkettete Liste statt ein Array für Verkettungen undefinierter Länge zu benutzen.

Nun zur Frage:
Warum steckt dahinter ein Array? Performance? Einfacher?


Zusatzfrage:
Ist T[] _items ein Array mit den Objekten T oder ein Array von Referenzen auf diese Objekte?
Tschuldigung für die Anfängerfrage.


Gruß.
*fall so'n bischen vom Glauben ab.*
 
Zuletzt bearbeitet:
Hi.

Eine List<T> ist zu allererst mal eine Datenstruktur die wahlfreien Zugriff per Index bietet. Dafür wäre eine verkettete Liste denkbar schlecht geeignet.

Eine LinkedList<T> dagegen ist auch wirklich als verkettete Liste implementiert.

Man sollte einfach die Datenstruktur wählen die am besten zur Problemstellung passt.

Zusatzfrage:
Ist T[] _items ein Array mit den Objekten T oder ein Array von Referenzen auf diese Objekte?
Tschuldigung für die Anfängerfrage.
Gegenfrage: Handelt es sich bei T um einen Werttyp oder Referenztyp?

Gruß
 
Hi deepthroat,

danke für die Antwort.
D.h. man nimmt die evtl. längere Zeit beim hinzufügen von Elementen in kauf um einen performanten Indexer zu haben. Hm, wäre eine Erklärung.

...
Gegenfrage: Handelt es sich bei T um einen Werttyp oder Referenztyp?

Gruß

ich meinte allgemein. Also beide.
Aus deiner Gegenfrage entnehme ich aber schon, dass es wohl bei Referenztypen die Referenz ist und bei Werttypen der Wert, Oder?
 
Zuletzt bearbeitet:
Zurück