集合和数据结构

类似的数据在作为集合而存储和操作时通常可以得到更高效地处理。 可使用 System.Array 类或 System.Collections、System.Collections.Generic、 System.Collections.Concurrent 和 System.Collections.Immutable 命令空间中的类来添加、移除和修改集合中的单个元素或一系列元素。
有两种主要的集合类型:泛型集合和非泛型集合。 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合。 因此,泛型集合通常能提供更好的性能。 构造泛型集合时,它们接受类型形参;并在向该集合添加项或从该集合删除项时无需在 Object 类型间来回转换。 此外,Windows 应用商店 应用程序支持大多数泛型集合。 非泛型集合将项存储为 Object,需要强制转换,并且大多数不支持 Windows 应用商店 应用程序开发。 但是,你可能会看到在较旧的代码中有非泛型集合。
自 .NET Framework 4 起,System.Collections.Concurrent 命名空间中的集合可提供高效的线程安全操作,以便从多个线程访问集合项。 System.Collections.Immutable 命名空间(NuGet 包)中的不可变集合类本质上就是线程安全的,因为是在原始集合的副本上执行操作,且不能修改原始集合。
常用集合功能
所有集合都提供用于在集合中添加、删除或查找项的方法。 此外,所有直接或间接实现 ICollection 接口或 ICollection 接口的集合均共享这些功能:
可枚举集合
.NET Framework 集合实现 System.Collections.IEnumerable
或 System.Collections.Generic.IEnumerable,以启用要循环访问的集合。 可将枚举器看作集合中可指向任何元素的可移动指针。 foreach, in 语句和 For Each…Next 语句使用 GetEnumerator 方法公开的枚举器并隐藏操作枚举器的复杂性。 此外,任何实现 System.Collections.Generic.IEnumerable 的集合均被认为是可查询类型,并可使用 LINQ 对其进行查询 。 LINQ 查询提供数据访问的一个通用模式。 它们通常比标准 foreach 循环更简洁、更具可读性,并提供筛选、排序和分组功能。 LINQ 查询还可提高性能。 有关详细信息。
可将集合内容复制到数组
可使用 CopyTo 方法将所有集合复制到数组中;但新数组中的元素顺序是以枚举器返回元素的顺序为依据。 得到的数组始终是一维的,下限为零。
此外,许多集合类包含下列功能:
容量和计数属性
集合的容量是它可包含的元素数。 集合的计数是它实际所含的元素数。 某些集合隐藏容量、计数或将这两者都隐藏。
达到当前容量时,大多数集合会自动扩展容量。 重新分配内存并将元素从旧集合复制到新集合。 这减少了要求使用集合的代码;但集合的性能可能会受到不利影响。 例如,对 List 来说,如果 Count 比 Capacity 少,那么添加项就是一项 O(1) 操作。如需增加容量以容纳新元素,则添加项成为 O(n) 操作,其中 n 是 Count。 避免因多次重新分配而导致的性能较差的最佳方式是:将初始容量设置为集合的估计大小。
BitArray 是一种特殊情况;它的容量与其长度相同,而其长度与其计数相同。
下限一致
集合的下限是其第一个元素的索引。 System.Collections 命名空间中的所有索引集合的下限均为零,这表示它们从 0 开始建立索引。 Array 默认下限为零,但使用 Array.CreateInstance 创建 Array 类的实例时可定义其他下限 。
同步以从多个线程进行访问(仅 System.Collections 类)。
System.Collections 命名空间中的非泛型集合类型通过同步提供一些线程安全性;通常通过 SyncRoot 和 IsSynchronized 成员公开。 这些集合不是默认为线程安全的。 如需对集合进行可扩展、高效的多线程访问,请使用 System.Collections.Concurrent 命名空间中的一个类或考虑使用不可变集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值