元素如何存储在.Net中的容器中?

时间:2010-07-30 05:12:39

标签: c# .net c++ data-structures containers

如何将元素存储在.Net中的容器中? 例如,C ++向量按顺序存储,而List则不按顺序存储 它们是如何为.Net容器(Array,ArrayList,...)实现的? 感谢。

3 个答案:

答案 0 :(得分:1)

因容器而异。由于实现是专有的,因此没有公共规范要求必须的基础数据结构。

如果您有兴趣抽出时间,我之前使用过以下工具来了解MS如何实现这个类或那个:

  • 使用Microsoft .NET Framework调试符号进行调试。
  • 使用Reflector检查装配体。

答案 1 :(得分:1)

这取决于元素。但是C ++ Vector相当于C#List,而C ++ List<T>相当于C#LinkedList

C#ArrayList几乎就是C#List<object>

维基百科列出many data structures,我建议您查看一下,了解不同的实现方式。

所以:

C++        C#                      How
Vector     ArrayList / List        Array (sequential)
List       LinkedList              Linked List (non-sequential, i.e. linked)

答案 2 :(得分:1)

在.net中,容器(甚至数组)处理对它们的所有访问。你不使用指针来处理它们(除非极少数情况下你可能不会进入),所以它们存储信息的方式通常无关紧要。在许多情况下,它甚至没有指明幕后的工作方式,因此可以将实现更改为“更好”的东西,而不会因某些愚蠢的原因而破坏依赖于这些细节的东西。

最后我听说,数组按顺序存储它们的条目 - 对于引用类型对象(不是结构的所有东西)的警告,“条目”是引用而不是对象本身。数据可以在内存中的任何位置。可以把它想象成一个引用数组而不是一个对象数组。

基于数组的ArrayLists应该以相同的方式存储它们的东西。