. net有很多复杂的数据结构。不幸的是,其中一些非常相似,我不总是确定什么时候使用一个,什么时候使用另一个。我的大多数c#和VB书籍都在一定程度上讨论了它们,但它们从来没有真正深入任何细节。
数组、数组列表、列表、哈希表、字典、排序列表和排序字典之间的区别是什么?
哪些是可枚举的(IList -可以做'foreach'循环)?哪些使用键/值对(IDict)?
内存占用呢?插入速度?检索速度?
还有其他值得一提的数据结构吗?
我还在寻找内存使用和速度的更多细节(大o符号)
. net有很多复杂的数据结构。不幸的是,其中一些非常相似,我不总是确定什么时候使用一个,什么时候使用另一个。我的大多数c#和VB书籍都在一定程度上讨论了它们,但它们从来没有真正深入任何细节。
数组、数组列表、列表、哈希表、字典、排序列表和排序字典之间的区别是什么?
哪些是可枚举的(IList -可以做'foreach'循环)?哪些使用键/值对(IDict)?
内存占用呢?插入速度?检索速度?
还有其他值得一提的数据结构吗?
我还在寻找内存使用和速度的更多细节(大o符号)
当前回答
泛型集合将比非泛型集合执行得更好,特别是在遍历许多项时。这是因为装箱和开箱不再发生。
其他回答
它们在智能感知上拼得很好。只需输入System.Collections。或者System.Collections.Generics(首选),你会得到一个可用的列表和简短描述。
如果可能的话,使用泛型。这包括:
List而不是ArrayList 字典而不是哈希表
关于高频系统交易工程的哈希表与字典的一个重要注意事项:线程安全问题
Hashtable是线程安全的,可以被多个线程使用。 字典公共静态成员是线程安全的,但任何实例成员都不能保证是线程安全的。
因此,Hashtable仍然是这方面的“标准”选择。
哈希表/字典是O(1)性能,这意味着性能不是大小的函数。知道这一点很重要。
编辑:在实践中,哈希表/字典<>查找的平均时间复杂度是O(1)。
我发现微软文档集合和数据结构页面上的“选择一个集合”部分非常有用
c#集合和数据结构:选择一个集合
还有下面的矩阵来比较一些其他的特征