c#(2)集合类,非泛型
1. 集合是一组对象的聚集,在程序设计中是一种重要的数据结构 | |
2. 实际上集合使用一个对象来代表一组对象,在集合中的对象成为元素。 | |
3. 集合类的元素类型是object,这意味着在集合中插入一个值是,他总是会进行装箱; | |
4. 从集合中移除一个值时,则必须进行强制类型的转换,从而对它进行拆箱。 | |
5. 集合表示一组可以通过遍历每一个元素来访问的一组对象,特别是能通过foreach循环访问他们。 | |
6. 对象如果可以提供相关对象的引用,就是一个集合,成为枚举,它可以遍历集合中的数据项。 | |
IEnumerable接口 | |
实现了IEnumerable接口的集合表明该集合能够以提供一个enumerator(枚举器)的对象,支持当前的遍历集合。 | |
方法 | 描述 |
GetEnumerator() | 遍历返回枚举对象 |
IEnumerator接口 | |
实现了IEnumerator接口实现了从一个元素向另一个元素移动的方法,同时也可以随时返回初始处。只读。 | |
方法 | 描述 |
MoveNext() | 调整遍历指针移向集合的下一个元素,该方法返回一个布尔值,如果成功遍历到下一个元素的话返回TRUE,指针一处末尾,返回FALSE。 |
Reset() | 设置指针指向的初始位置,即集合中第一个元素的前面。 |
Current() | 返回集合中当前对象的引用。 |
ICollection接口 | |
该接口是IEnumerable接口的子接口,定义了集合的大小、IEnumerator接口和同步方法 | |
属性 | 描述 |
Count | 该属性返回集合中元素的数目 |
方法 | 描述 |
CopyTo(Array array,int index) | 该方法用于实现从集合中拷贝元素到另一个一维数组 |
SyncRoot和IsSynchronized:这些属性允许类实现线程安全的集合。 | |
ArrayList类 | |
属性 | 描述 |
Capacity | 获取或设置ArrayList可包含的元素数 |
Count | 获取ArrayList中实际包含的元素数 |
Item | 获取或设置制定位置的元素。通过索引 |
注意:Capacity永远大于等于Count | |
方法 | 描述 |
Remove() | 移除一个元素 |
Add() | 在末尾添加一个元素 |
Insert() | 插入一个元素 |
Clear() | 从ArrayList对象中移除所有的元素 |
Contains() | 确定某元素是否在ArrayList对象中 |
GetEnumerator() | 返回循环访问ArrayList对象中的枚举数 |
IndexOf() | 返回ArrayList对象或它一部分中某个值的第一个匹配项的从ling6kaishi的索引 |
RemoveAt() | 移除ArrayList对象中指定索引出的元素 |
Reverse() | 将ArrayList对象中的元素顺序进行反转 |
Sort() | 将ArrayList对象中的元素进行排序 |
ToArray() | 将ArrayList对象中的元素复制到新数组中 |
注意:不能在遍历一个ArrayList对象的foreach循环中使用Remove方法。 | |
Queue类 | |
属性 | 描述 |
Count | 获取Queue中包含的元素数目 |
方法 | 描述 |
Clear() | 从Queue中移除所有的对象 |
Dequeue() | 移除并返回处于Queue开始处的对象 |
Enqueue() | 将对象添加到Queue的结尾处素 |
Peek() | 返回位于Queue开始处的对象,但是不删除它 |
Queue 实现了一个先入先出的(FIFO)机制。 | |
Stack类 | |
属性 | 描述 |
Count | 获取Stack中包含的元素数目 |
方法 | 描述 |
Clear() | 从Stack中移除所有的对象 |
Push() | 将对象查处Stack的顶部 |
Pop() | 删除并返回位于Stack顶部的对象 |
Peek() | 返回位于Stack顶部的对象但不将其删除 |
Stack 实现了一个后入先出的(LIFO)机制。 | |
Hashtable类 | |
1. Hashtable不能包含重复的key,如果调用Add方法来添加一个Keys数组中已经 有的Key,就会抛出异常——除非使用方括号法添加一对key/value。为了测 试Hashtable中是否已经包含一个特定的key,可以使用ContainsKey方法 | |
2. 使用foreach语句来遍历一个Hashtable时,会返回一个DictionaryEntry, DictionaryEntry类允许你通过key属性和value属性来访问数组中的key和value。 | |
SortList类 | |
1. 该类和Hashtable类非常相似,主要区别在于,在SortList中,Keys数组总是排好序的 | |
2. 类似于Hashtable,一个SortList不能包含重复的key,使用foreach循环时返回 的是一个DictionaryEntry对象,然会DictionaryEntry对象根据key属性将排好序的方式返回。 |
泛型最常见的用途是泛型集合,命名空间System.Collections.Generic中包含了一些基于泛型的集合类,使用泛型集合类可以提高更高类型安全性,还有更高的性能,避免了非泛型集合的重复装箱和拆箱。
很多非泛型集合类都有对应的泛型集合类。
非泛型集合类 泛型集合类
ArrayList List<T>
HashTable Dictionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>
一般用的最多我认为有ArrayList和HashTable。我们经常用HashTable来存储要写入到数据库或者返回的信息,在这之间要不断 的进行类型的转化,增加了系统装箱和拆箱的负担。如果我们操纵的数据类型相对确定的话,用Dictionary<TKey, TValue>集合类来存储数据就方便多了