List.Remove (T) verwendet in seiner Implementierung IndexOf und RemoveAt (int). So ist List.RemoveAt (int) schneller.
%Vor%Einfache Antwort:
Im Allgemeinen ist RemoveAt
schneller, aber nicht immer sehr groß.
Lange Antwort:
Sehen wir uns zuerst den passenden Gegenstand an. Die Methode Remove
muss die Liste nach dem Objekt durchsuchen, das mit dem angegebenen Objekt übereinstimmt, und ist daher im Allgemeinen O(n)
time. RemoveAt
auf einer Liste kann den angegebenen Eintrag einfach indexieren und ist somit O(1)
.
Nun ist das Entfernen eines Elements vom Ende einer Liste immer O(1)
natürlich, aber im Allgemeinen dauert das Entfernen eines Elements O(n)
time, da das Umordnen durchgeführt werden muss (Verschieben von Elementen nach dem entfernten Element). Daher ist im Allgemeinen die gesamte Zeitkomplexität für das Entfernen entweder O(n) + O(n)
oder O(n) + O(1)
für Remove bzw. RemoveAt, also in beiden Fällen einfach O(n)
. % Co_de% ist jedoch garantiert mindestens genauso schnell, obwohl die Skalierung die gleiche ist, es sei denn, Sie wissen, dass Sie sie am Ende des Vorgangs entfernen.
Da ein .Net einen Vektor (oder ein Array) infiziert, keine verknüpfte Liste, ist RemoveAt () schneller.
Verwenden Sie System.Diagnostics.Stopwatch()
Ich hätte gerade eine kleine Konsolen-App erstellt, um zu überprüfen, welche schneller ist.
Tags und Links .net generics collections