集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。
集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类
目前主要所学有一下几种
1)ArrayList
ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素,相当于List < object>
类似于数组,称数组列表,ArrayList可以动态维护,可以自动扩容。
命名空间:using System.Collections
属性:
count 获取ArrayList的元素个数
方法
Add (object value) 添加元素
RemoveAt(int index) 移除指定索引处元素
Remove(object value) 移除指定元素
Clear() 清除所有元素
2)List < T >
泛型的List 类是一个不限长度的集合类型,它内部实际就是一个数组,初始长度是4,每次数组到达限制,就会把现有容量翻倍,它提供用于对集合进行搜索、排序和操作等方法
List是数组链表,数组链表访问快,复杂度O(1),但是添加删除复杂度O(n)
List<T>和ArrayList()的区别:
不同点:
List<T> ArrayList()
1:对所保存的元素进行类型的约束 可以增加任何类型
2:添加/读取值类型元素的无须拆箱和装箱 添加/读取值类型元素的需要拆箱和装箱
相同点:
1:通过索引访问集合中的元素
2:添加的元素方法相同
3:删除元素的方法相同
3)Dictionary < K, V>
存储键值对的关联性集合,查询等操作速度很快,因为它的时间复杂度是O(1)
,单线程中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用更充分.
4)LinkedList
LinkedList是List接口的双向链表非同步实现,并允许包括null在内的所有元素。
底层的数据结构是基于双向链表的,
LinkedList是指针链表,指针链表访问复杂度是O(n),但是添加删除很快O(1),如果对这个集合在中间的添加删除操作非常频繁的话,就建议使用LinkedList。
5)Hashtable
Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对.
称哈希表,通过键(key)和值(value)
属性:
count Hashtable中元素个数
Keys Hashtable中键的集合
Value Hashtable中值得集合
方法:
Add(object Keys,object value) 添加元素
Remove (object value) 移除指定元素
Clear() 清除所有元素
Dictionary<k,V> 和Hashtable的区别:
不同点:
Dictionary<k,V> Hashtable
1:对所保存的元素进行约束 可以增加任何类型
2:添加/读取值类型元素的无须拆箱和装箱 添加/读取值类型元素的需要拆箱和装箱
相同点:
1:通过Key获取Value
2:添加的元素方法相同
3:删除元素的方法相同
4:遍历方法相同