关于c#3.0:C#中的ArrayList和Hashtable有什么区别?

What is difference between ArrayList and Hashtable in C#?

我想在arraylist或hastable中存储一组数据,但是数据检索应该是高效和快速的。我想知道arraylist和hastable之间隐藏的数据结构(即链表、双链表)


ArrayList是一个动态数组,随着新项目的添加而增长,超出了列表的当前容量。arraylist中的项由索引访问,很像数组。

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

一般来说,在.NET 2.0及更高版本中,ArrayListHashtable不受欢迎,而倾向于ListDictionary,它们是性能更好且不具有值类型装箱成本的更好的通用版本。

我有一篇博客文章比较了这里每个通用容器的各种好处,这些好处可能很有用:

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

虽然它特别提到了一般的集合,但ArrayListListHashtableDictionary具有相似的复杂性成本。


哈希表将字符串值映射到哈希表中的值。数组列表将一组项目按编号顺序排列。

1
2
3
4
5
6
7
8
9
10
11
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


顾名思义,array list(或list)是用数组实现的…实际上,哈希表也是用相同的数据结构实现的。因此,它们都有一个固定的访问成本(尽可能最好)。

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

希望它有帮助。