常用的集合类型
集合类型表示收集数据的不同方式,例如哈希表、队列、堆栈、包、字典和列表。
所有集合都直接或间接基于 ICollection<T> 或 ICollection 接口。 IList 和 IDictionary 及其泛型对应项均派生自这两个接口。
在基于 IList 或直接基于 ICollection 的集合中,每个元素都只包含一个值。 这些类型包括:
在基于 IDictionary 接口的集合中,每个元素都只包含一个键和一个值。 这些类型包括:
- Hashtable
- SortedList
- SortedList<TKey,TValue>
- Dictionary<TKey,TValue>
- ConcurrentDictionary<TKey,TValue>
KeyedCollection<TKey,TItem> 类是唯一的,因为它是值中嵌键的值的列表。 因此,它的行为类似列表和字典。
需要高效的多线程集合访问时,请使用 System.Collections.Concurrent 命名空间中的泛型集合。
Queue 和 Queue<T> 类提供的是先进先出列表。 Stack 和 Stack<T> 类提供的是后进先出列表。
强类型化
泛型集合都是强类型的最佳解决方案。 例如,将除 Int32 外的任何类型的元素添加到集合 List<Int32>
会导致编译时错误。 但是,如果你的语言不支持泛型,那么 System.Collections 命名空间包含抽象基类,可扩展以创建强类型集合类。 这些基类包括:
集合之间存在哪些不同
集合在存储、排序和比较元素以及执行搜索的方式方面有所不同。
SortedList 类和 SortedList<TKey,TValue> 泛型类提供 Hashtable 类和 Dictionary<TKey,TValue> 泛型类的已排序版本。
所有集合中使用的索引都从零开始,Array 除外,它允许不从零开始的数组。
可以通过键或元素的索引访问 SortedList 或 KeyedCollection<TKey,TItem> 的元素。 只能通过元素的键访问 Hashtable 或 Dictionary<TKey,TValue> 的元素。
将 LINQ 与集合类型配合使用
LINQ to Objects 功能提供通用模式,用于访问实现 IEnumerable 或 IEnumerable<T> 的任何类型的内存中对象。 与标准构造(如 foreach
循环)相比,LINQ 查询具有多项优势:
- 简洁明了,更易于理解。
- 可以对数据进行筛选、排序和分组。
- 可以提高性能。
有关详细信息,请参阅 “LINQ to Objects (C#)”、“LINQ to Objects (Visual Basic)” 和 “并行 LINQ (PLINQ)”。
相关主题
Title | 描述 |
---|---|
集合和数据结构 | 讨论 .NET 中的各种集合类型,包括堆栈、队列、列表、数组和字典。 |
哈希表和字典集合类型 | 描述泛型和非泛型的基于哈希的字典类型的功能。 |
已排序的集合类型 | 描述为列表和集提供排序功能的类。 |
泛型 | 描述泛型功能,包括 .NET 提供的泛型集合、委托和接口。 为 C#、Visual Basic 和 Visual C++ 提供功能文档链接和支持技术(如反射)链接。 |
参考
System.Collections.ICollection
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IList<T>