Warum wird die Liste einfügen fehlschlagen, wenn es in ausreichender Größe vorgesehen ist, Bau -?
Wenn wir die folgende Variablen-Deklaration:
List<int> list = new List(5);
Warum dies so:
list.insert(2, 3);
mit dem folgenden Fehler fehl:
Index must be within the bounds of the List.
Was ist der Punkt der Bereitstellung der anfänglichen Größe?
- Sie können nicht einfügen an position 2, wenn die Positionen 0 und 1 sind noch nicht gefüllt
- Wie richtig darauf hingewiesen, daß die Kapazität ist nicht das gleiche wie Größe. Schreiben Sie die Anzahl auf der Konsole vor dem Aufruf von Einfügen, die Liste weniger als 3 Elemente, so das einfügen neuer Wert an der 3. position nicht.
InformationsquelleAutor Erix | 2012-01-04
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle die ursprüngliche Größe hat ist einen Tipp geben, die Durchführung mindestens einer gegebenen Kapazität. Es bedeutet nicht, erstellen Sie eine Liste, gefüllt mit
N
Standard-Einträge; Hervorhebung von mir:Wenn Sie weiterhin über die MSDN-Eintrag im Abschnitt mit den hinweisen, die Sie finden, warum dieser Konstruktor überladen wird gestellt (wieder, Hervorhebung von mir):
Kurz
List<T>.Count
ist nicht das gleiche wieList<T>.Capacity
("Wenn die Zahl übersteigt die Kapazität durch das hinzufügen von Elementen, die Kapazität erhöht...").Erhalten Sie die Ausnahme, weil die Liste nur logisch enthält die Elemente, die Sie hinzufügen, ändern der Kapazität ändert nicht die Anzahl der Elemente logisch gespeichert. Sie setzen die
List<T>.Capacity
auf weniger alsList<T>.Count
test können wir dieses Verhalten in die andere Richtung:Vielleicht schaffen, das Verhalten, das Sie suchen:
List<T>
nichtLinkedList<T>
oder eine andere Umsetzung. Alles, was Sie tun, ist sagen Sie es auf erwartenN
Einträge in der Hoffnung, dass die Auswirkungen auf die Leistung erweitern der Liste zu halten, dass viele Einträge werden als vernachlässigbar.Intern eine List(T) wird realisiert durch ein array in den hintergrund. Beim initialisieren der Liste, die Weise, die Sie sind, nur die Einstellung der Größe des zugrunde liegenden array ändert, wie die Liste wächst. So sind Sie die Initialisierung der anfänglichen Kapazität. Es bedeutet nicht, dass Ihre Liste, die viele Elemente.
Sie das hinzufügen von Elementen zu der Liste, indem Sie zuerst initialisieren und dann Elemente hinzufügen, um es mit
.Add(item)
.Größe im Konstruktor erzählt Sie, wie viel Sie zu reservieren für die hintergrund-array - noch ist es jedoch leer (nur: leer, mit einem bestimmten Betrag, der erste Raum).
Können Sie nur einfügen in den benutzten Teil der Liste, oder am Ende.
Da einfügen, wird davon ausgegangen, dass die Liste tatsächlich ist, dass viele Artikel bereits eingefügt - Kapazität ist nicht das gleiche wie Größe. Die Initialisierung der Liste mit einer gegebenen Kapazität stellt nur die Größe des internen array - es ist eine Optimierung, um zu verhindern, dass die array-Größe, wenn Sie wissen, die Anzahl der Elemente, die Sie einfügen werden.
List(int) - Konstruktor legt anfänglichen Kapazität von der Liste. Es tut nicht angeben, die Anzahl der ersten Elemente. Bei der Erstellung einer Liste ist leer, also jede insertion kann nur gemacht werden mit dem index 0.
Die ursprüngliche Größe wird verwendet, um anzuzeigen, die Größe des internen Arrays, zunächst.
Beim einfügen von Elementen in eine Liste, es speichert Sie in einem array. Wenn das array voll ist, wird ein neues array der doppelten Größe, und kopiert alle Elemente. Wenn Sie eine Idee haben, Sie gehen zu setzen in 5000 Artikel, würde Sie angeben möchten, dass der Hinweis, damit es nicht am Ende tun eine Menge von array-Größenänderung /kopieren.
Die anfängliche Größe nicht nicht darauf hin, dass alle Elemente in der Liste obwohl.
Das ist, weil die ganze Zahl, die Sie im Konstruktor angegeben ist der Betrag, der in der Liste halten kann. Wenn Elemente Hinzugefügt werden, die Liste wird automatisch erhöht. Die Größenänderung wird vermieden, wenn Sie angeben, einer ersten Kapazität, die mit der Anzahl der Elemente, die Sie hinzufügen möchten.
Allerdings haben Sie immer noch die Add-Methode verwenden, um neue Elemente hinzuzufügen.
Sehen die Bemerkungen Abschnitt in der Dokumentation
Verwenden