【发布时间】:2011-04-11 20:20:52
【问题描述】:
在我看来,List 基本上是使用LinkedList 实现的,而普通的Array 是作为连续块实现的。我一直使用List,因为它位于Generic 命名空间中,而且我认为它使用了动态内存分配 - 但我错了。
昨天看到List使用Reflector的实现,发现其实是一个T(T[])的数组。在处理List 中的每个元素时,周围有很多Array.Copy。例如,当您使用Insert 时,它将创建一个新内存并复制插入元素之前/之后的所有元素。所以在我看来,使用List 非常昂贵。
我也看到了SortedList。我不确定为什么 SortedList 也在其中实现了一个数组。你不认为SortedList 使用数组会很糟糕,因为每次对List 进行小操作时都需要对列表进行排序?
我也想知道为什么List 如此受欢迎,因为大多数人都使用它而不是去LinkedList。仅仅是因为索引器的灵活性吗?
【问题讨论】:
-
仔细观察:List not 创建一个新数组并在 each 调用时复制所有项目。数组只有在满时才会调整大小,并且会调整为原始大小的两倍。当不断添加项目时,调整大小只会以指数增加的间隔发生。
-
这个问题没有正确答案。考虑更具体或标记为 wiki
-
@dtb 是的,它使用 this._items[this._size++] = item;是的,它以指数方式增加间隔,但它如何始终确保 size++ 确实有一个空白空间?
标签: c# list linked-list sortedlist