Простой ответ:
В общем, RemoveAt
быстрее, хотя и не всегда очень сильно.
Длинный ответ:
Давайте сначала рассмотрим поиск подходящего предмета. Метод Remove
должен искать в списке элемент, который соответствует данному объекту, и, таким образом, в общем случае O(n)
время. RemoveAt
в списке может просто индексировать данный элемент и, таким образом, O(1)
.
Теперь удаление элемента из конца списка всегда, конечно, O(1)
, но в целом удаление элемента занимает O(n)
время, потому что необходимо произвести перестановку (перемещение элементов после удаленного вперед). Следовательно, в общем случае общая сложность времени для удаления составляет либо O(n) + O(n)
, либо O(n) + O(1)
для Remove и RemoveAt соответственно, следовательно, просто O(n)
в любом случае. Тем не менее, RemoveAt
гарантированно будет, по крайней мере, таким же быстрым, хотя масштабирование будет таким же, если только вы не знаете, что удаляете его в конце или ближе к концу.