代码改变世界

C#集合

2011-10-26 15:56  javaspring  阅读(205)  评论(0编辑  收藏  举报

出处:http://www.cnblogs.com/feisky/archive/2009/10/29/1591956.html


System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。

System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。

System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。

在System.Collections命名空间中提供了许多接口:

  • IEnumerable循环集合项目
  • ICollection可以获取集合中项目个数
  • IList项目列表
  • IDictionary提供了键码索引

(一)ArrayList 类:使用大小可按需动态增加的数组。

  

(二)Queue:队列,表示对象的先进先出集合。Enqueue方法入队列,Dequeue方法出队列。



(三)Stack:栈,表示对象的简单的后进先出非泛型集合。Push方法入栈,Pop方法出栈。


(四)哈希表

一、哈希表(Hashtable)简述
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

二、哈希表的简单操作
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:

三、遍历哈希表
遍历哈希表需要用到DictionaryEntry Object,代码如下:

四、对哈希表进行排序
对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:

(五)SortedList类:表示键/值对的集合,与哈希表类似,区别在于SortedList中的Key数组排好序的。




(六)Dictionary 泛型集合

泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。
很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类:
非泛型集合类 泛型集合类
ArrayList List<T>
HashTable DIctionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化 用 Dictionary<TKey,TValue> 集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息( 商品名,对应的商品个数)时,完全可以用 Dictionary<string, int> 来存储购物车信息,而不需要任何的类型转化。

下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对
 

常用的属性和方法如下:

常用属性

属性说明

Comparer

获取用于确定字典中的键是否相等的IEqualityComparer

Count

获取包含在Dictionary中的键/值对的数目。

Item

获取或设置与指定的键相关联的值。

Keys

获取包含Dictionary中的键的集合。

Values

获取包含Dictionary中的值的集合。

常用的方法

方法说明

Add

将指定的键和值添加到字典中。

Clear

Dictionary中移除所有的键和值。

ContainsKey

确定Dictionary是否包含指定的键。

ContainsValue

确定Dictionary是否包含特定值。

Equals

已重载。 确定两个Object实例是否相等。(从Object继承。)

GetEnumerator

返回循环访问Dictionary的枚举数。

GetHashCode

用作特定类型的哈希函数。GetHashCode适合在哈希算法和数据结构(如哈希表)中使用。 (从Object继承。)

GetObjectData

实现System.Runtime.Serialization.ISerializable接口,并返回序列化Dictionary实例所需的数据。

GetType

获取当前实例的Type(从Object继承。)

OnDeserialization

实现System.Runtime.Serialization.ISerializable接口,并在完成反序列化之后引发反序列化事件。

ReferenceEquals

确定指定的Object实例是否是相同的实例。(从Object继承。)

Remove

Dictionary中移除所指定的键的值。

ToString

返回表示当前ObjectString(从Object继承。)

TryGetValue

获取与指定的键相关联的值。