详解如何选择使用ArrayList、HashTable、List、Dictionary数组

2019-12-30 14:39:54于海丽

ListDictionary(单向链表),LinkedList<T>(双向链表)

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

ListDictionary是单向链表。

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

HybridDictionary

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

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

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

BitArray

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

应用场景

ArrayList,List<T>:变长数组;

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

HashSet<T>:集合运算;

Queue、Queue<T>:先进先出;

Stack、Stack<T>:堆栈,先进先出;

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

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

LinkedList<T>:双向链表;

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

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

BitArray:二进制运算时可选用;

以上所述是本文的全部内容,希望对大家有所帮助!


注:相关教程知识阅读请移步到c#教程频道。