集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解

简介:

IEnumerator

该接口定义需要实现以下方法:

  1. Current:获取集合中的当前元素。
  2. MoveNext:将枚举数推进到集合的下一个元素。
  3. Reset: 将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。

实现以上方法的类也就意味着这个集合类能够被遍历访问。

 

IEnumerable

able意味着这个类能够达到上面IEnumerator的效果, 事实上也是如此,可以从这个接口定义方法中看出来:

 

  • GetEnumerator: 返回一个IEnumerator类型的值

IEnumerable是集合类的基础, 它解决了集合类如何遍历的问题, 所以更高级的集合类和接口都是继承IEnumerable

所有能够使用foreach遍历的集合类,都必须继承IEnumerable接口

 

ICollection

ICollection接口扩展IEnumerable

这个接口是很多集合类的继承接口,定义了3个属性和一个方法

 

只读属性

Count:集合中元素的数目

IsSynchronized: 是否同步对集合的访问

SyncRoot: 用来控制集合同步的对象

 

方法

CopyTo: 从特定的索引开始复制集合的元素到数组

 

IList

IList 是 ICollection 接口的子代,并且是所有非泛型列表的基接口。 

 

IDictionary

IDictionary 接口是键/值对的非通用集合的基接口。 
       每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。 
每一对都必须有唯一的键。实现在是否允许键为空引用方面有所不同。此值可以为空引用,并且不必是唯一的。IDictionary 接口允许对所包含的键和值进行枚举,但这并不意味着任何特定的排序顺序。 

C# 语言中的 foreach 语句需要集合中每个元素的类型。由于 IDictionary 对象的每个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型。而是 DictionaryEntry 类型

 

注意几个基接口:

枚举数的基接口:IEnumerator,而IEnumerable则是获取枚举数的方法

类的基接口:ICollection

列表的基接口:IList

键/值对的基接口:IDictionary

 

基本上看到的大多受集合类都是继承自IList和IDictionary, 但是也有一些直接继承自ICollection, 如Queue, Stack, 原因应该是它们有自己独特的添加/删除元素的方式

相关文章
|
8月前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型
|
8月前
|
存储 C# 索引
C# | 比较IEnumerable、List、数组
IEnumerable`定义了一组用于枚举集合的方法,包括`GetEnumerator`方法,该方法返回一个实现了`IEnumerator`接口的对象,用于枚举集合中的每个元素。`List`和数组都可以使用`foreach`循环来遍历其中的元素,这是因为它们都实现了`IEnumerable`接口。 由于数组在内存中开辟了一段连续的空间,因此可以直接通过索引访问元素,访问速度很快。而 List 则需要通过指针或引用来访问元素,速度相对较慢。 由于数组的大小是固定的,当需要添加或删除元素时,需要重新创建一个新数组,将原数组中的元素复制到新数组中,并添加或删除元素。
266 0
C# | 比较IEnumerable、List、数组
|
存储 安全 Java
Java集合框架-Collection03-Map集合
Java集合框架-Collection03-Map集合
Java集合框架-Collection03-Map集合
|
存储 Java
Java集合框架-Collection02- LinkedHashSet
Java集合框架-Collection02- LinkedHashSet
|
C# 索引
C#List转IList方法
List类:表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。 IList接口:表示可按照索引单独访问的一组对象。
314 0
C#List转IList方法
|
SQL .NET 数据库
IEnumerable和IQueryable在使用时的区别
最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。 微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。
1319 0