集合接口和类型

 在.NET 2.0之前,不存在泛型。现在泛型集合类通常是集合的首选类型。泛型集合类是类型安全的,如果使用值类型,是不需要装箱操作的。如果要在集合中添加不同类型的对象,且这些对象不是相互派生的,例如在集合中添加int和string对象,就只需基于对象的集合类。另一组集合类是专用于特定类型的集合,例如StringCollection类专用于string类型。
对集合非常重要的接口及其方法和属性如表:

  接    口方法和属性                                        说    明
IEnumerable,
IEnumerable<T>
GetEnumerator()如果将foreach语句用于集合,就需要接口IEnumerable。这个接口定义了方法GetEnumerator(),它返回一个实现了IEnumerator的枚举。泛型接口IEnumerable<T>继承了非泛型接口IEnumerable,定义了一个返回Enumerable<T>的GetEnumerator方法。因为这两个接口具有继承关系,所以对于每个需要IEnumerable类型参数的方法,都可以传送Enumerable<T>对象
ICollectionCount,
IsSynchronized,
SyncRoot,
CopyTo()
接口ICollection由集合类实现。使用这个接口的方法可以在集合中添加和删除元素
ICollection<T>Count,IsReadOnly,
Add(),Clear(),
Contains(),CopyTo()
Remove()
接口ICollection<T>扩展了接口IEnumerable的功能
IListIsFixedSize,
IsReadOnly,
Item,Add,Clear,
Contains,IndexOf,
Insert,Remove,
RemoveAt
接口IList派生于接口ICollection。IList允许使用索引器访问集合,还可以在集合的任意位置插入或删除元素
IList<T>Item,IndexOf
Insert,Remove
与接口ICollection<T>类似,接口IList<T>也继承了接口ICollection。
Array类实现了这个接口,但添加或删除元素的方法会抛出NotSupportedException异常。在大小固定的只读集合(如Array类)中,这个接口定义的一些方法会抛出NotSupportedExceptiuon异常
IDictionaryIsFixedSize,
IsReadOnly,Item,
Keys,Values,Add(),Clear(),Contains(),
GetEnumerator(),
Remove()
接口IDictionary或IDictionary<TKey,TValue>由其元素包含键和值的集合实现
IDictionary<TKey,TValue>Item,Keys,Values,Add(),
ContainsKey (),
Remove(),
TyrGetValue()
IComparer<T>Compare()接口IComparer<T>由比较器实现,通过Compare()方法给集合中的元素排序
IEqualityComparer<T>Equals(),
GetHashCode()
接口IEqualityComparer<T>由一个比较器实现,该比较器可用于字典中的键。使用这个接口,可以对对象进行相等比较。方法GetHashCode()应为每个对象返回一个唯一值。如果对象相等,Equals()方法就返回true,否则返回false

        System.Collections.IList界面的对象,根据这一定义,我将在System.Collections名域空间范围内的“内建”的集合分为三类:
  
  有序集合:只实现ICollection界面的集合,事实上的插入的顺序决定了对象从集合中被检索到的顺序,System.Collections.Stack类和System.Collections.Queue是两个ICollection集合的例子。
  
  索引集合:实现了IList界面的集合,他们的内容可以通过一个以零为基准的数字索引中检索到,就像数组一样。System.Collections.ArrayList对象是索引集合的一个例子。
  
  键值集合:实现了IDictionary界面的集合,包含了可以按照某些关联键值检索到的项目,IDictionary的内容通常以键值为基础按照某些形式进行排序,在检索时,这些内容可以按照排好序的枚举表示。System.Collections.HashTable类实现了IDictionary的界面。
  
  正如你所看到的,一个给定集合的功能是由专门的界面或它所实现的界面控制的,如果你对面向对象程序设计没有大量的接触,这一点看上去即使不是毫无意义,也会让人非常困惑。然而,你应当知道,以这种方式建立一个对象的功能,不仅给与了相似的对象一系列相似的方法签名,而且还允许在必要的时候将这些对象当作本质上相同的类来对待,这就是在面向对象程序设计中所说的多态性。
  
  System.Collections的“导游”指南
  
  在System.Collections名域空间中包括了6个内建的普通集合,你可以在程序中使用它们,另外有少许特殊的集合可以在System.Collections.Specialized中找到,你会发现在某些场合中它们非常有用。在少数例外的情况下,每一个特殊的集合与一个内建的集合拥有相似的功能,让我们先来看一下这些内建的集合和一些不太深奥的特殊集合。
  
  堆栈与队列
  
  System.Collections.Stack和System.Collections.Queue类是只实现了ICollection界面的类,它们将System.Object类型的项目按照加入的顺序排列到集合中,集合中的对象只能按照以下的顺序获取到:堆栈是后进先出,而队列是先进先出,通常,你会在以下情况中考虑使用这些集合:
  
  项目的接收和处理顺序很重要时;
  你可以在处理一个项目之后删除它;
  你不需要在集合中访问任意项目;
  
  数组表
  
  System.Collections.ArrayList类是只实现了IList界面的类,数组与集合的混合体是对它最好的描述,数组表将项目按照加入的顺序排列,每个项目被分配一个索引标识符,依据相关的索引号可以按照任意顺序检索,数组表会因项目的增加而变大,这使它比一般的数组更灵活,然而,所有可被转化为System.Object的项目均可被数组表接受,因而它比传统数组的系统开销要大很多,而且它也不是强类型(strongly typed)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值