Если говорить асимптотически, O (N) - сложность времени самого метода в наихудшем случае, где N - количество. Это не может работать хуже, чем это.
Практически, это было бы в порядке O (N-I) (игнорируя постоянные издержки времени), где I - индекс. Это выводимо, так как все элементы за указанным индексом I необходимо сместить на позицию, предшествующую им соответственно в списке.
Чтобы понять это интуитивно, если N равно 100, а индекс равен 99 (последний элемент), то нет элементов, которые нужно «сдвигать», только последний элемент удаляется (или просто счет уменьшается без изменения размера). структуры данных).
Аналогично, когда N равно 100, а индекс равен 0 (первый элемент), необходимо выполнить 99 смен.
Запустите следующий код и убедитесь сами:
int size = 1000000;
var list1 = new List<int>();
var list2 = new List<int>();
for (int i = 0; i < size; i++)
{
list1.Add(i);
list2.Add(i);
}
var sw = Stopwatch.StartNew();
for (int i = 0; i < size; i++)
{
list1.RemoveAt(size-1);
list1.Add(0);
}
sw.Stop();
Console.WriteLine("Time elapsed: {0}", sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (int i = 0; i < size; i++)
{
list2.RemoveAt(0);
list2.Add(0);
}
sw.Stop();
Console.WriteLine("Time elapsed: {0}", sw.ElapsedMilliseconds);