技术备忘录 (C#集合类与泛型集合类)

集合类的使用大体追寻如下次序:优先选用现有的泛型集合类、接着才是选择制定自己特有的泛型集合类、然后选择使用现有非泛型集合类、最后选择自己定义需要的非泛型集合类。

 

集合类具有以下特点:

  • 集合类定义为 System.Collections 或 System.Collections.Generic 命名空间的一部分。

  • 大多数集合类都派生自 ICollectionIComparerIEnumerableIListIDictionaryIDictionaryEnumerator 接口以及它们的等效泛型接口。

  • 使用泛型集合类可以提供更高的类型安全性,在某些情况下还可以提供更好的性能,尤其是在存储值类型时,这些优势会体现得更明显。

 

下面的泛型类型对应于现有的非泛型集合类型:

  • List< (Of < ( T> ) > ) 是对应于 ArrayList 的泛型类。

  • Dictionary< (Of < ( TKey, TValue> ) > ) 是对应于 Hashtable 的泛型类。

  • Collection< (Of < ( T> ) > ) 是对应于 CollectionBase 的泛型类。Collection< (Of < ( T> ) > ) 可以用作基类,但与 CollectionBase 不同的是它不是抽象的。这样使用起来要方便得多。

  • ReadOnlyCollection< (Of < ( T> ) > ) 是对应于 ReadOnlyCollectionBase 的泛型类。ReadOnlyCollection< (Of < ( T> ) > ) 不是抽象的,它具有一个构造函数,该构造函数使其易于将现有的 List< (Of < ( T> ) > ) 公开为只读集合。

  • Queue< (Of < ( T> ) > ) 、Stack< (Of < ( T> ) > ) 和 SortedList< (Of < ( TKey, TValue> ) > ) 泛型类分别对应于与其同名的非泛型类。

有几种泛型集合类型没有对应的非泛型类型:

  • LinkedList< (Of < ( T> ) > ) 是一个通用链接列表,它提供运算复杂度为 O(1) 的插入和移除操作。

  • SortedDictionary< (Of < ( TKey, TValue> ) > ) 是一个排序的字典,其插入和检索操作的运算复杂度为 O(log n ),这使得它成为 SortedList< (Of < ( TKey, TValue> ) > ) 的十分有用的替代类型。

  • KeyedCollection< (Of < ( TKey, TItem> ) > ) 是介于列表和字典之间的混合类型,它提供了一种存储包含自己键的对象的方法。

LINQ to Objects

LINQ to Objects 功能允许使用 LINQ 查询访问内存中的对象,但条件是该对象类型要实现 IEnumerable 或 IEnumerable< (Of < ( T> ) > ) 。LINQ 查询提供了一种通用的数据访问模式;与标准 foreach 循环相比,它通常更加简洁,可读性更高;这种查询可提供筛选、排序和分组功能。LINQ 查询还可提高性能。有关更多信息,请参见 LINQ to Objects 。

其他功能

一些泛型类型具有非泛型集合类型中没有的功能。例如,List< (Of < ( T> ) > ) 类(对应于非泛型 ArrayList 类)具有许多接受泛型委托(如允许指定搜索列表的方法的 Predicate< (Of < ( T> ) > ) 委托、表示操作每个列表元素的 Action< (Of < ( T> ) > ) 委托和允许定义类型之间转换的 Converter< (Of < ( TInput, TOutput> ) > ) 委托)的方法。

List< (Of < ( T> ) > ) 类允许指定您自己的用于排序和搜索列表的 IComparer< (Of < ( T> ) > ) 泛型接口实现。SortedDictionary< (Of < ( TKey, TValue> ) > ) 和 SortedList< (Of < ( TKey, TValue> ) > ) 类也具有此功能,此外还允许在创建集合时指定比较器。类似地,Dictionary< (Of < ( TKey, TValue> ) > ) 和 KeyedCollection< (Of < ( TKey, TItem> ) > ) 类允许您指定自己的相等比较器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值