数组与集合
数组是相同类型的对象的集合。它是一个抽象类。构建数组方法:
Array myArray=Array.CreateInstance(typeof(string),10)
System.Collections
命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。
System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
集合提供了用于管理对象组的高级功能,集合是一个特殊化的类,用于组织和公开一组对象。与数组一样,可以通过索引访问集合的成员,但不一样的是,集合的大小可以动态调整,而且成员可以在运行时添加和删除。
集合都实现了
ICollection
接口,而
ICollection
接口继承自
IEnumerable
接口,因此每个内建的集合也实现了
IEnumerable
接口。
ICollection
接口主要方法:
GetEnumerator
:遍历整个集合。返回一个
IEnumerator
对象。
CopyTo
:将集合的元素复制到一个数组中。
ICollection
接口主要属性:
Count:
集合中元素的个数。
IsSynchornized:
表明这个类是否是线程安全的。
SyncRoot:
设置对象是否与集合同步。
1 ArrayList
集合
ArrayList
实际上是
Array
的优化版本,功能强于
Array
。
ArrayList 的特点:
ArrayList 的特点:
(
1
)
Array
容量或元素个数固定,而
ArrayList
容量则可动态扩展。
(
2
)
Array
只一次只能对一个索引进行操作,而
ArrayList
则可以添加、插入或移除一组元素。
(
3
)
Array
下界可以设置,而
ArrayList
的下界始终为
0
。
(
4
)
Array
可以有多维,而
ArrayList
只有一维。
(
5
)
System.Array
与
System.IConllections.ArrayList
属于不同的命名空间。





































2
Hashtable
集合
(
1
)哈希表哈简述
哈希表用于处理和表现类似
key/value
的键值对,其中
key
通常可用来快速查找,同时
key
是区分大小写
,
不可以重复;
value
用于存储对应于
key
的值。
Hashtable
中
key/value
键值对均为
object
类型,所以
Hashtable
可以支持任何类型的
key/value
键值对
.
( 2 )哈希表的成员
( 2 )哈希表的成员
A
主要方法
Add(key,value)
:在哈希表中添加一个
key/value
键值对
Remove(key)
:在哈希表中去除某个
key/value
键值对
Clear()
:从哈希表中移除所有元素
Contains(key)
:判断哈希表是否包含特定键
key
GetEnumerator
:遍历
哈希表
。返回一个
IEnumerator
对象。
B
主要属性
:
Count
:设置或获取键值对的数量
Keys
:返回
ICollection
,它包含哈希表中键。
Values
:返回
ICollection
,它包含哈希表中值。
哈希表
简单操作




























遍历哈希表








3 SortedList集合
它是个混合性的集合。混合了ArrayList和Hashtable。表示键/值对的集合,与哈希表类似,区别在于SortedList中的Key数组是排好序的。















4 Stack集合
栈,表示对象的后进先出集合。
主要方法:
Peek():返回集合顶部元素,但不删除此元素
Pop():出栈,返回并删除集合顶部元素
Push():入栈,将指定元素插入到集体顶部






































5 Queue集合
队列,表示对象的先进先出集合。
主要方法:
Enqueue():入队列,将指定元素添加到集合的结尾。
Dequeue():出队列,返回并删除集合开始处的元素。
Peek():返回集合顶部元素,但不删除此元素






































6 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> 来存储购物车信息,而不需要任何的类型转化。
常用的属性和方法如下:
常用属性
|
属性说明
|
获取用于确定字典中的键是否相等的 IEqualityComparer。
| |
获取包含在 Dictionary 中的键/值对的数目。
| |
获取或设置与指定的键相关联的值。
| |
获取包含 Dictionary 中的键的集合。
| |
获取包含 Dictionary 中的值的集合。
| |
常用的方法
|
方法说明
|
将指定的键和值添加到字典中。
| |
从 Dictionary 中移除所有的键和值。
| |
确定 Dictionary 是否包含指定的键。
| |
确定 Dictionary 是否包含特定值。
| |
已重载。 确定两个 Object实例是否相等。 (从 Object继承。)
| |
返回循环访问 Dictionary 的枚举数。
| |
用作特定类型的哈希函数。GetHashCode适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object继承。)
| |
获取当前实例的 Type。 (从 Object继承。)
| |
实现 System.Runtime.Serialization.ISerializable 接口,并在完成反序列化之后引发反序列化事件。
| |
确定指定的 Object 实例是否是相同的实例。 (从 Object继承。)
| |
从 Dictionary 中移除所指定的键的值。
| |
返回表示当前 Object 的 String。 (从 Object继承。)
| |
获取与指定的键相关联的值。
|
下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对。


















































































