Array:
优点:在内存中连续存储,索引速度快;访问简单,可通过下标进行访问;赋值和修改简单
缺点:声明数组的时候必须制定数组长度;插入和删除数组时,需要移动大量元素;数组长度过大时,会造成内存浪费,过段时会造成内存溢出。
使用(具体使用见具体文章):
int size = 5;
int[] test = new int[size];
ArrayList :使用该数据结构时,需引用System.Collections
优点:对象大小按照其存储的数据动态扩充与收缩,声明时不需要制定长度;能够便捷的进行添加和删除操作;可以存储不同类型的元素;
缺点:将所有的插入数据当做object处理,使用时可能会报类型不匹配的错误(非类型安全);在存储和检索时会产生装箱和拆箱操作,性能损耗大;
使用:
ArrayList
test3 = new
ArrayList();
//新增数据
test3.Add("chen");
test3.Add("j");
test3.Add("d");
test3.Add("is");
test3.Add(25);
//修改数据
test3[4]
= 26;
//删除数据
test3.RemoveAt(4);
List (泛型List):ArrayList的泛型等效类,用法与ArrayList相似,声明时需要为其声明List集合内数据的对象类型,属于经常使用的数组类型。
优点:避免类型安全问题;解决拆装箱的性能问题;可以灵活改变长度,融合了Array可以快速访问及ArrayList长度可以灵活变化的优点(其内部为一个强类型的Array)
使用:
List<string>
test4 = new
List<string>();
//新增数据
test4.Add(“Fanyoy”);
test4.Add(“Chenjd”);
//修改数据
test4[1]
= “murongxiaopifu”;
//移除数据
test4.RemoveAt(0);
LinkedList:双向链表实现的List,存储空间不连续,不能通过下标访问
优点:插入删除简单高效;适合在有序情况下增加新的元素;适用于元素数量不固定,两端存取且经常增减节点的情况
缺点:访问时必须从头节点开始遍历直至找到目标,不利于快速访问对象
Queue:先进先出,即最先插入的元素最先被删除,最后进入的元素最后被删除,通过Enqueue和Dequeue进行出队和入队操作
Stack:后进先出,只允许在尾端进行插入或删除等操作的线性表。表尾允称为栈顶(Top),另一端是固定的,称为栈底(Bottom).栈的操作使按照先进后出或后进先出的原则进行的。栈使用连续的空间存储栈中数据,类似于顺序表,比较浪费存储空间
Hashtable:hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对。
HashSet:包含不重复项的无序列表。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet。这个名称很容易理解,因为这个集合基于散列值,插入元素的操作非常快,不需要像List类那样重排集合。
Dictionary
//定义
Dictionary<string, string> openWith = new Dictionary<string, string>();
//添加元素
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
//取值
Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
openWith["rtf"] = "winword.exe";
Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
//遍历key
foreach (string key in openWith.Keys)
{
Console.WriteLine("Key = {0}", key);
}