网站建设资讯

NEWS

网站建设资讯

ArrayList与HashSet在C#中有什么区别

这篇文章将为大家详细讲解有关 ArrayList与HashSet在C#中有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、巴州网站维护、网站推广。

在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求。

由于这种限制不方便,所以出现了ArrayList。

ArrayList、List

ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面。其内部维护的数组,当长度不足时,会自动扩容为原来的两倍。

但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱、拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能。在.Net 2.0泛型出现以后,就提供了List

List是ArrayList的泛型版本,它不再需要装箱拆箱,直接取,直接用,它基本与ArrayList一致,不过在使用的时候要先设置好它的类型,而设置好类型之后,不是这种类型的数据,是不允许Add进去的。

就性能来说,如果要存进数组的只有一种数据,那么无疑List是最优选择。

List ListInt = new List();

如果一个变长数组,又要存int,又要存string。那么就只能用ArrayList。

HashTable(哈希表)、Dictionary

HashTable是一种根据key查找非常快的键值数据结构,不能有重复key,而且由于其特点,其长度总是一个素数,所以扩容后容量会比2倍大一点点,加载因子为0.72f。

当要大量使用key来查找value的时候,HashTable无疑是最有选择,HashTable与ArrayList一样,是非泛型的,value存进去是object,存取会发生装箱、拆箱,所以出现了Dictionary

Dictionary是HashTable的泛型版本,存取同样快,但是不需要装箱和拆箱了。而且,其优化了算法,Hashtable是0.72,它的浪费容量少了很多。

Dictionary Dic = new Dictionary();

HashSet

HashSet类,算法,存储结构都与哈希表相同,主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特定顺序的元素。

Queue、Queue

Queue队列,Queue泛型队列,大学都学过,队列,先进先出,很有用。

Stack、Stack

Stack堆栈,先进后出。

SortedList、SortedList

SortedList集合中的数据是有序的。可以通过key来匹配数据,也可以通过int下标来获取数据。

添加操作比ArrayList,Hashtable略慢;查找、删除操作比ArrayList快,比Hashtable慢。

SortedDictionary

SortedDictionary相比于SortedList其性能优化了,SortedList其内部维护的是数组而SortedDictionary内部维护的是红黑树(平衡二叉树)的一种,因此其占用的内存,性能都好于SortedDictionary。唯一差在不能用下标取值。

ListDictionary(单向链表),LinkedList(双向链表)

List,ArrayList,Hashtable等容器类,其内部维护的是数组Array来,ListDictionary和LinkedList不用Array,而是用链表的形式来保存。链表最大的好处就是节约内存空间。

ListDictionary是单向链表。

LinkedList双向链表。双向链表的优势,可以插入到任意位置。

HybridDictionary

HybridDictionary的类,充分利用了Hashtable查询效率高和ListDictionary占用内存空间少的优点,内置了Hashtable和ListDictionary两个容器,添加数据时内部逻辑如下:

当数据量小于8时,Hashtable为null,用ListDictionary保存数据。

当数据量大于8时,实例化Hashtable,数据转移到Hashtable中,然后将ListDictionary置为null。

BitArray

BitArray这个东东是用于二进制运算,"或"、"非"、"与"、"异或非"等这种操作,只能存true或false;

应用场景

ArrayList,List:变长数组;

HashTable,Dictionary:频繁根据key查找value;

HashSet:集合运算;

Queue、Queue:先进先出;

Stack、Stack:堆栈,先进先出;

SortedList、SortedList:哈希表,要通过下标,又要通过key取值时,可选用;

ListDictionary:单向链表,每次添加数据时都要遍历链表,数据量大时效率较低,数据量较大且插入频繁的情况下,不宜选用。

LinkedList:双向链表;

HybridDictionary:未知数据量大小时,可用。

SortedDictionary:SortedList的优化版,内部数组转平衡二叉树。

关于 ArrayList与HashSet在C#中有什么区别就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


文章题目:ArrayList与HashSet在C#中有什么区别
分享链接:http://njwzjz.com/article/jgighh.html