1:数组
1 string[] strs = new string[5]; 2 //赋值 3 strs[0] = "0"; 4 strs[1] = "1"; 5 //修改 6 strs[1] = "burg"; 7 //删除 没法删除 除非转化为可变数组list8 9 //取值 10 string str = strs[0];
优点:数组是定义的是 是分配在一段连续的内存空间上,且大小确定,这样是的数组的索引效率非常高,只要偏移地址就可以快速访问元素,所以数组的查询,赋值,更新 效率较高 复杂度o(1)
缺点:犹豫数组分配在一段连续的地址上 所以导致 存储效率较低,在插入 和删除 元素的时候 比较麻烦 如果插入一个元素 会导致插入元素后面的元素 位置全部移动,删除也是同理
2:ArrayList
ArrayList arrayList = new ArrayList(); //赋值 arrayList.Add(1); arrayList.Add("string"); arrayList.Add(true); //修改 arrayList[0] = 2; //删除 arrayList.RemoveAt(3);//删除第三个元素 //指定索引插入元素 arrayList.Insert(1, "ABC"); //取值 string a = (string)arrayList[0];
优点:继承了IList 接口 提供了很多便捷的方法去操作数组,数组的长度可变不在固定
确点:数组里面的数据类型 不唯一 到是使用的时候 数据类型不安全 ,取值出来的时候 都是object 类型,使用的时候会导致很多 装箱 拆箱的问题 ,导致性能的损耗
3:List
List<string> list = new List<string>(); list.Add("burg"); list.Add("xun"); list[1] = "A"; list.RemoveAt(1); list.Insert(1, "B"); string listStr = list[0];
泛型List:同样继承了IList 接口 提供了方便的 操作数组的方法,同时规定了 集合类型 使得数据类型安全 避免了装箱拆箱的问题
数组集合。 查询、修改、新增(尾部新增)快,删除、新增(队列中间)慢,适用于查询、修改较多的场景
4:HashTable(哈希表)、Dictionary
HashTable是一种根据key查找非常快的键值数据结构,不能有重复key,而且由于其特点,其长度总是一个素数,所以扩容后容量会比2倍大一点点,加载因子为0.72f。
当要大量使用key来查找value的时候,HashTable无疑是最有选择,HashTable与ArrayList一样,是非泛型的,value存进去是object,存取会发生装箱、拆箱,所以出现了Dictionary
Dictionary
5:ListDictionary(单向链表),LinkedList(双向链表)
List
ListDictionary是单向链表。
LinkedList
6:HashSet
HashSet
ArrayList,List
HashTable,Dictionary
HashSet
Queue、Queue
Stack、Stack
SortedList、SortedList
ListDictionary:单向链表,每次添加数据时都要遍历链表,数据量大时效率较低,数据量较大且插入频繁的情况下,不宜选用。
LinkedList
HybridDictionary:未知数据量大小时,可用。
SortedDictionary
BitArray:二进制运算时可选用;
内容引用于:https://blog.csdn.net/wildlifeking/article/details/58605587