1、简单的命名空间:
(1)Array、Enum、String、Obj等:引入命名空间:using System;
(2)ArrayList、HashTable等: 引入命名空间: using System.Collections
(3)List<T>、Queue<T>: 引入命名空间:using System.Collections.Generic;
2、最长用的集合类进行简单的总结:{
非范型的基本已经不用了
ArraryList 后来被List<T>替代。
HashTable 后来被Dictionary<TKey,TValue>替代。
Queue 后来被Queue<T>替代。
SortedList 后来被SortedList<T>替代。
Stack 后来被Stack<T>替代。
}
集合 | 说明 |
List<T>、LinkedList<T>、SortedList<T> | 可以像数组一样按索引访问列表,但提供了其他方法来搜索和排序; 双向有序列表,为任何一端的插入和删除进行了优化,这种集合既可作为队列,也可作为栈,还支持列表那样的随机访问; 键/值对的有序列表,键必须实现Icomparable<T>接口; |
Queue<T> | 先入先出数据结构,提供了方法将数据项添加到队列的一段,从另一端删除项,以及只检查不删除 |
Stack<T> | 先入后出数据结构,提供了方法将数据压入栈顶,从栈顶出栈,以及只检查栈顶的项而不删除 |
HashSet<T>、SortedSet<T> | 无序值列表,为快速数据获取而优化,提供了面向集合的方法来判断它容纳的项是不是另一个HashSet<T> 对象中的项的子集,以及计算不同HashSet<T> 对象的交集和并集; 有序Set,键必须实现Icomparable<T>接口 |
Dictionary<TKey,TValue>、SortedDictionary<TKey, TValue> | 字典集合根据键而不是索引来获取值 |
在SortedList中,键和值分别保存在一个数组中,当向Sorted添加一个元素时,SortedList类添加一个元素时,SortedList会首先对key进行排序,然后根据排序结果计算出要插入到集合中的位置索引,再分别将key和value插入到各自数组的指定索引位置。
Queue、Stack的一些重要特性。
1、Queue先进先出、Stack后进先出
2、可以添加null值到集合中
3、允许集合中的元素重复
4、Queue、Stack容量会按需自动添加
下面是各种常见集合类的定义:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection,
IEnumerable, IStructuralComparable, IStructuralEquatable
[SerializableAttribute]
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>,
IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Queue<T> : IEnumerable<T>, IEnumerable, ICollection,
IReadOnlyCollection<T>
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Stack<T> : IEnumerable<T>, IEnumerable, ICollection,
IReadOnlyCollection<T>
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class LinkedList<T> : ICollection<T>, IEnumerable<T>,
IEnumerable, ICollection, IReadOnlyCollection<T>, ISerializable,
IDeserializationCallback
[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class HashSet<T> : ICollection<T>, IEnumerable<T>, IEnumerable,
ISerializable, IDeserializationCallback, ISet<T>, IReadOnlyCollection<T>
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>,
IReadOnlyCollection<KeyValuePair<TKey, TValue>>, ISerializable,
IDeserializationCallback
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class SortedList<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>,
IReadOnlyCollection<KeyValuePair<TKey, TValue>>
3、非泛型和泛型集合的接口
IDictionary、IList接口--继承-> ICollection --继承-> IEnumerable接口(GetEnumerator方法)
IDictionary接口是键/值对接口,它的实现如HashTable类而IList是值的集合,其成员可通过索引访问,如ArrayList类
非泛型集合接口 | 泛型集合接口 | 说明 |
ICollection | ICollection<T> | 定义所有集合的大小(Count),枚举器(foreach)和同步(copyto)方法,继承自IEnumerable |
IList | IList<T> | 表示可按照索引单独访问的一组对象(像数组一样) |
IDictionary | IDictionary<T> | 表示键/值对的集合 |
IComparer | IComparer<T> | 定义类型为比较两个对象而实现的方法 |
IEqualityComparer | IEqualityComparer<T> | 定义方法以支持对象的相等比较 |
IEnumerable | IEnumerable<T> | 公开枚举器。实现了该接口意味着允许foreach语句循环访问集合中的元素 |
IEnumerator | IEnumerator<T> | 支持在泛型集合上进行简单迭代 |
IEnumerable接口非常简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象(Current属性,MoveNext和Reset两个方法)