Ответ 1
Ну, List<T>
в основном поддерживается массивом, который обычно больше, чем текущее количество элементов. Элементы помещаются в массив, и новый массив создается, когда у старого пробегает пробел. Это быстрый доступ к индексу, но медленный при удалении или вставке элементов в список или в начале. Добавление/удаление записей в конце списка достаточно дешево.
LinkedList<T>
является двусвязным списком - каждый node знает свою предыдущую запись и свою следующую. Это быстро для вставки после/до определенного node (или головы/хвоста), но медленного доступа по индексу.
LinkedList<T>
обычно занимает больше памяти, чем List<T>
, поскольку для этого требуется пространство для всех следующих/предыдущих ссылок - и у данных, вероятно, будет меньше локальности ссылки, так как каждый node является отдельным объектом. С другой стороны, List<T>
может иметь базовый массив, который намного больше, чем его текущие потребности.