NET有很多复杂的数据 struct .不幸的是,其中一些非常相似,我并不总是确定何时使用一个,何时使用另一个.我的大多数C#和VB书籍都在一定程度上讨论了它们,但它们从未真正深入到任何真正的细节.

Array、ArrayList、List、Hashtable、Dictionary、SortedList和SortedDictionary之间有什么区别?

哪些是可枚举的(IList--可以执行"foreach"循环)?哪些使用键/值对(IDict)?

内存占用呢?插入速度?检索速度?

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

我仍在寻找有关内存使用和速度(大O表示法)的更多细节

推荐答案

在我的脑海里:

  • Array*-表示老式内存数组-有点像普通type[]数组的别名.可以枚举.不能自动增长.我假设插入和检索速度非常快.

  • ArrayList-自动扩展array.增加了更多开销.可以枚举,可能比普通数组慢,但仍然相当快.这些在.NET中经常使用

  • List--我的最爱之一--可以和泛型一起使用,所以你可以有一个强类型的数组,比如List<string>.除此之外,它的行为很像ArrayList

  • Hashtable-普通的旧哈希表.O(1)到O(N)的最坏情况.可以枚举值和键属性,并执行键/值对

  • Dictionary-与上面相同,只是通过泛型(如Dictionary<string, string>)实现强类型

  • SortedList-排序的泛型列表.放慢了插入的速度,因为它必须找出把东西放在哪里.可以枚举,在检索上可能是相同的,因为它不需要重新排序,但是删除将比普通的旧列表慢.

我总是倾向于使用ListDictionary——一旦你开始使用强类型泛型,就很难回到标准的非泛型.

还有很多其他的数据 struct ——有KeyValuePair个可以用来做一些有趣的事情,还有SortedDictionary个也很有用.

.net相关问答推荐

通过交互服务器渲染模式和流渲染的组合防止双重渲染

PowerShell 5.1和7在使用证书时的区别

跨请求共享数据

使用React路由加载器获取数据不能正常工作

竖线在 PropertyGroup .csproj 文件中的含义

来自奥尔森时区的 .NET TimeZoneInfo

每第 N 个字符/数字拆分一个字符串/数字?

将笔画应用于 WPF 中的文本块

实例化具有运行时确定类型的对象

为什么 .NET 中没有可序列化 XML 的字典?

.NET 4.0 中有内置的二叉搜索树吗?

String 是原始类型吗?

从 C# 中的接口继承 XML 注释

我不了解应用程序域

如何禁用 Alt + F4 关闭表单?

我应该绑定到 ICollectionView 还是 ObservableCollection

使用 lambda 表达式代替 IComparer 参数

为什么 !0 是 Microsoft 中间语言 (MSIL) 中的一种类型?

如何将 .NET 应用程序编译为本机代码?

System.ServiceModel 在 .NET Core 项目中找不到