C# ArrayList、HashSet、HashTable、List、Dictionary的区别
2021-02-06 04:14
标签:很多 object类 加载 异或 ict hybrid ted 占用 类型 在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求。 由于这种限制不方便,所以出现了ArrayList。 ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面。其内部维护的数组,当长度不足时,会自动扩容为原来的两倍。 但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱、拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能。在.Net 2.0泛型出现以后,就提供了List List 就性能来说,如果要存进数组的只有一种数据,那么无疑List 如果一个变长数组,又要存int,又要存string。那么就只能用ArrayList。 HashTable是一种根据key查找非常快的键值数据结构,不能有重复key,而且由于其特点,其长度总是一个素数,所以扩容后容量会比2倍大一点点,加载因子为0.72f。 当要大量使用key来查找value的时候,HashTable无疑是最有选择,HashTable与ArrayList一样,是非泛型的,value存进去是object,存取会发生装箱、拆箱,所以出现了Dictionary Dictionary HashSet Queue队列,Queue Stack堆栈,先进后出。 SortedList集合中的数据是有序的。可以通过key来匹配数据,也可以通过int下标来获取数据。 添加操作比ArrayList,Hashtable略慢;查找、删除操作比ArrayList快,比Hashtable慢。 SortedDictionary List ListDictionary是单向链表。 LinkedList HybridDictionary的类,充分利用了Hashtable查询效率高和ListDictionary占用内存空间少的优点,内置了Hashtable和ListDictionary两个容器,添加数据时内部逻辑如下: 当数据量小于8时,Hashtable为null,用ListDictionary保存数据。 当数据量大于8时,实例化Hashtable,数据转移到Hashtable中,然后将ListDictionary置为null。 BitArray这个东东是用于二进制运算,"或"、"非"、"与"、"异或非"等这种操作,只能存true或false; ArrayList,List HashTable,Dictionary HashSet Queue、Queue Stack、Stack SortedList、SortedList ListDictionary:单向链表,每次添加数据时都要遍历链表,数据量大时效率较低,数据量较大且插入频繁的情况下,不宜选用。 LinkedList HybridDictionary:未知数据量大小时,可用。 SortedDictionary BitArray:二进制运算时可选用; 引用于https://blog.csdn.net/wildlifeking/article/details/58605587 C# ArrayList、HashSet、HashTable、List、Dictionary的区别 标签:很多 object类 加载 异或 ict hybrid ted 占用 类型 原文地址:https://www.cnblogs.com/yiyi20120822/p/11429137.htmlArrayList、List
List
HashTable(哈希表)、Dictionary
Dictionary
HashSet
Queue、Queue
Stack、Stack
SortedList、SortedList
SortedDictionary
ListDictionary(单向链表),LinkedList
HybridDictionary
BitArray
应用场景
文章标题:C# ArrayList、HashSet、HashTable、List、Dictionary的区别
文章链接:http://soscw.com/index.php/essay/51596.html