Согласно документации MSDN по методу List<T>.Clear
:
Этот метод является операцией O (n),
где n - граф.
Почему O (n)? Я спрашиваю, потому что я предполагаю, что очистка List<T>
может быть достигнута простым выделением нового массива T[]
внутри. Ни один другой класс не может иметь ссылку на этот массив, поэтому я не вижу вреда в этом подходе.
Теперь, может быть, это глупый вопрос ... выделяет ли массив T[]
сам O (n)? По какой-то причине я бы так не думал; но, может быть, это так (разве мое отсутствие степени бакалавра в области образования показывает сейчас?). Если это так, я полагаю, это объяснило бы это, поскольку, согласно той же документации, процитированной выше, емкость списка остается неизменной, что означает, что необходимо построить массив одинакового размера.
(Опять же, это не похоже на то, что это могло бы быть правильным объяснением, так как тогда в документации должно было быть сказано: «где n - Емкость » - не Count
*).
Я просто подозреваю , что этот метод, вместо выделения нового массива, обнуляет все элементы текущего; и мне любопытно узнать, почему это так.
* Ханс Пассант указал в комментарии к LukeH ответ , что документы верны. Clear
только обнуляет элементы, которые были установлены в List<T>
; ему не нужно «обнулять» все элементы после них.