国外做的比较好的展台网站,开发工具怎么使用,网站制作分工,施工企业安全费用管理制度在C#中#xff0c;数组由于是固定长度的#xff0c;所以常常不能满足我们开发的需求。
由于这种限制不方便#xff0c;所以出现了ArrayList。
ArrayList、ListT ArrayList是可变长数组#xff0c;你可以将任意多的数据Add到ArrayList里面。其内部维护的数组…在C#中数组由于是固定长度的所以常常不能满足我们开发的需求。
由于这种限制不方便所以出现了ArrayList。
ArrayList、ListT ArrayList是可变长数组你可以将任意多的数据Add到ArrayList里面。其内部维护的数组当长度不足时会自动扩容为原来的两倍。
但是ArrayList也有一个缺点就是存入ArrayList里面的数据都是Object类型的所以如果将值类型存入和取出的时候会发生装箱、拆箱操作(就是值类型与引用类型之间的转换)这个会影响程序性能。在.Net 2.0泛型出现以后就提供了ListT。
ListT是ArrayList的泛型版本它不再需要装箱拆箱直接取直接用它基本与ArrayList一致不过在使用的时候要先设置好它的类型而设置好类型之后不是这种类型的数据是不允许Add进去的。
就性能来说如果要存进数组的只有一种数据那么无疑ListT是最优选择。
Listint ListInt new Listint();
如果一个变长数组又要存int又要存string。那么就只能用ArrayList。
HashTable(哈希表)、DictionaryT,T HashTable是一种根据key查找非常快的键值数据结构不能有重复key而且由于其特点其长度总是一个素数所以扩容后容量会比2倍大一点点加载因子为0.72f。
当要大量使用key来查找value的时候HashTable无疑是最有选择HashTable与ArrayList一样是非泛型的value存进去是object,存取会发生装箱、拆箱所以出现了DictionaryT,T。
DictionaryT,T是HashTable的泛型版本存取同样快但是不需要装箱和拆箱了。而且其优化了算法Hashtable是0.72它的浪费容量少了很多。
Dictionarystring,Person Dic new Dictionarystring,Person();
HashSetT HashSetT类算法存储结构都与哈希表相同主要是设计用来做高性能集运算的例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特定顺序的元素。
Queue、QueueT Queue队列QueueT泛型队列大学都学过队列先进先出很有用。
Stack、StackT Stack堆栈先进后出。
SortedList、SortedListTKey,TValue SortedList集合中的数据是有序的。可以通过key来匹配数据也可以通过int下标来获取数据。
添加操作比ArrayListHashtable略慢查找、删除操作比ArrayList快比Hashtable慢。
SortedDictionaryTKey,TValue SortedDictionaryTKey,TValue相比于SortedListTKey,TValue其性能优化了SortedListTKey,TValue其内部维护的是数组而SortedDictionaryTKey,TValue内部维护的是红黑树(平衡二叉树)的一种因此其占用的内存性能都好于SortedDictionaryTKey,TValue。唯一差在不能用下标取值。
ListDictionary(单向链表),LinkedListT(双向链表) ListT,ArrayList,Hashtable等容器类其内部维护的是数组Array来ListDictionary和LinkedListT不用Array而是用链表的形式来保存。链表最大的好处就是节约内存空间。
ListDictionary是单向链表。
LinkedListT双向链表。双向链表的优势可以插入到任意位置。
HybridDictionary HybridDictionary的类充分利用了Hashtable查询效率高和ListDictionary占用内存空间少的优点内置了Hashtable和ListDictionary两个容器添加数据时内部逻辑如下
当数据量小于8时Hashtable为null用ListDictionary保存数据。
当数据量大于8时实例化Hashtable数据转移到Hashtable中然后将ListDictionary置为null。
BitArray BitArray这个东东是用于二进制运算或、非、与、异或非等这种操作只能存true或false
应用场景 ArrayList,ListT变长数组
HashTable,DictionaryT,T频繁根据key查找value
HashSetT集合运算
Queue、QueueT先进先出
Stack、StackT堆栈先进先出
SortedList、SortedListTKey,TValue哈希表要通过下标又要通过key取值时可选用
ListDictionary单向链表每次添加数据时都要遍历链表数据量大时效率较低数据量较大且插入频繁的情况下不宜选用。
LinkedListT双向链表
HybridDictionary未知数据量大小时可用。
SortedDictionaryTKey,TValueSortedListTKey,TValue的优化版内部数组转平衡二叉树。
BitArray二进制运算时可选用