C#中ArrayList和Hashtable有什么区别?

时间:2011-07-21 14:32:26

标签: c#-3.0

我想在ArrayList或Hastable中存储一组数据,但数据回溯应该是高效和快速的。我想知道ArrayList和Hastable之间的数据结构隐藏(即链接列表,双链表)

3 个答案:

答案 0 :(得分:6)

ArrayList是一个动态数组,随着新项目的增加而增长,超出了列表的当前容量。 ArrayList中的项目由索引访问,非常类似于数组。

Hashtable是幕后的哈希表。底层数据结构通常是一个数组,但不是通过索引访问,而是通过一个键字段访问,该字段通过调用密钥对象的GetHashCode()方法映射到哈希表中的一个位置。

一般情况下,在.NET 2.0及更高版本中不鼓励使用ArrayListHashtable,而List<T>Dictionary<TKey, TValue>是更好的通用版本,效果更好没有价值类型的装箱费用。

我有一篇博文,比较了每个通用容器的各种好处,可能会有用:

http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx

虽然它特别谈到了通用集合,但ArrayListList<T>HashtableDictionary<TKey, TValue>的复杂性成本相似

答案 1 :(得分:2)

哈希表会将字符串值映射到哈希表中的值。一个arraylist按顺序排列了一堆项目。

Hastable ht = new Hastable();
ht("examplenum") = 5;
ht("examplenum2") = 7;
//Then to retrieve
int i = ht("example");  //value of 5

ArrayList al = new ArrayList();
al.Add(2);
al.Add(3);
//Then to retrieve
int j = al[0]  //value of 2

答案 2 :(得分:0)

顾名思义,ArrayList(或List)是用Array实现的......事实上,Hashtable也是用相同的数据结构实现的。因此,它们都具有不变的访问成本(尽可能最好)。

您需要考虑的是您需要什么样的钥匙。如果必须使用任意键(例如,字符串)访问数据,则无法使用ArrayList。此外,如果密钥不是(或多或少)相关的,那么Hashtable应该是您的首选。

希望它有所帮助。