.NET具有许多复杂的数据结构。不幸的是,其中一些非常相似,我不确定何时使用一个以及何时使用另一种使用。我的大多数C#和VB书籍都在一定程度上谈论了它们,但是它们从未真正介绍过任何真正的细节。

数组,阵列,列表,hashtable,词典,排序列表和sortedDictionary之间有什么区别?

哪些是枚举的(iList-可以做’foreach’循环)?哪些使用密钥/值对(IDICT)?

那内存足迹呢?插入速度?检索速度?

还有其他值得一提的数据结构吗?

我仍在寻找有关内存使用和速度的更多详细信息(Big-O符号)

答案

我的头顶:

  • Array* - 代表一个老式的记忆阵列 - 有点像一个正常的别名type[]大批。可以枚举。无法自动增长。我假设插入和检索速度非常快。

  • ArrayList - 自动生长阵列。添加更多开销。可以枚举,可能比普通数组慢,但仍然很快。这些在.net中经常使用

  • List - 我的最爱之一 - 可以与仿制药一起使用,因此您可以具有强烈的键入数组,例如List<string>。除此之外,行为非常类似ArrayList

  • Hashtable - 普通的旧标签。o(1)到O(n)最坏情况。可以列举价值和钥匙属性,并进行键/阀对

  • Dictionary - 与上面仅通过仿制药进行了强烈键入相同的相同,例如Dictionary<string, string>

  • SortedList - 一个分类的通用列表。插入放缓,因为它必须弄清楚要放在哪里。可以枚举,因为它不必求助,因此可能是相同的,但是删除将比普通的旧列表慢。

我倾向于使用ListDictionary一直以来 - 一旦您开始使用仿制药强烈键入它们,就很难返回标准的非生成元素。

还有很多其他数据结构 - 还有KeyValuePair您可以用它来做一些有趣的事情,有一个SortedDictionary这也可能有用。

来自: stackoverflow.com