【问题标题】:How are elements stored in containers in .Net?元素如何存储在 .Net 的容器中?
【发布时间】:2010-07-30 05:12:39
【问题描述】:

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

【问题讨论】:

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


【解决方案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】:

    它因容器而异。因为实现是专有的,所以没有公共规范规定底层数据结构必须是什么。

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

    • 使用 Microsoft .NET Framework 调试符号进行调试。
    • 使用反射器检查组件。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 2021-03-08
        • 2011-06-08
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多