我想在ArrayList或Hastable中存储一组数据,但数据回溯应该是高效和快速的。我想知道ArrayList和Hastable之间的数据结构隐藏(即链接列表,双链表)
答案 0 :(得分:6)
ArrayList
是一个动态数组,随着新项目的增加而增长,超出了列表的当前容量。 ArrayList中的项目由索引访问,非常类似于数组。
Hashtable
是幕后的哈希表。底层数据结构通常是一个数组,但不是通过索引访问,而是通过一个键字段访问,该字段通过调用密钥对象的GetHashCode()
方法映射到哈希表中的一个位置。
一般情况下,在.NET 2.0及更高版本中不鼓励使用ArrayList
和Hashtable
,而List<T>
和Dictionary<TKey, TValue>
是更好的通用版本,效果更好没有价值类型的装箱费用。
我有一篇博文,比较了每个通用容器的各种好处,可能会有用:
虽然它特别谈到了通用集合,但ArrayList
与List<T>
和Hashtable
到Dictionary<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应该是您的首选。
希望它有所帮助。