List<>
использует массив для внутреннего использования, поэтому List<uint>
должен занимать пространство O (4 байта * n), как и uint[]
. По сравнению с массивом могут быть некоторые более постоянные издержки, но обычно вам это не нужно.
В зависимости от конкретной реализации (эта может отличаться при использовании Mono в качестве среды выполнения вместо среды выполнения MS .NET), внутренний массив будет больше, чем количество фактических элементов в списке. Например, список из 5 элементов имеет внутренний массив, который может хранить 10, список из 10000 элементов может иметь внутренний массив размером 11000. Таким образом, вы не можете сказать, что внутренний массив всегда будет в два раза больше или на 5% больше. чем номер элемента списка, это также может зависеть от размера.
Редактировать: Я только что видел, Ганс Пассант описал растущее поведение List<T>
здесь .
Итак, если у вас есть коллекция элементов, к которой вы хотите добавить данные, и вы не можете знать размер этой коллекции на момент создания списка, используйте List<T>
. Он специально разработан для этого случая. Он обеспечивает быстрый произвольный доступ O (1) к элементам и имеет очень небольшие накладные расходы памяти (внутренний массив). С другой стороны, он очень медленно удаляется или вставляется в середину списка. Если вам часто нужны эти операции, используйте LinkedList<T>
, который, однако, потребляет больше памяти (на элемент!). Если вы знаете размер своей коллекции с самого начала и знаете, что она не изменится (или просто очень мало раз), используйте массивы.