【发布时间】:2011-07-21 14:32:25
【问题描述】:
我想在 ArrayList 或 Hastable 中存储数据集合,但数据检索应该高效且快速。我想知道ArrayList和Hastable之间隐藏的数据结构(即链表、双链表)
【问题讨论】:
标签: c#-3.0
我想在 ArrayList 或 Hastable 中存储数据集合,但数据检索应该高效且快速。我想知道ArrayList和Hastable之间隐藏的数据结构(即链表、双链表)
【问题讨论】:
标签: c#-3.0
ArrayList 是一个动态数组,随着添加超出列表当前容量的新项目而增长。 ArrayList 中的项目通过索引访问,很像数组。
Hashtable 是幕后的哈希表。底层数据结构通常是一个数组,但不是通过索引访问,而是通过一个键字段访问,该字段通过调用键对象的 GetHashCode() 方法映射到哈希表中的某个位置。
一般来说,ArrayList 和 Hashtable 在 .NET 2.0 及更高版本中不鼓励使用,而支持 List<T> 和 Dictionary<TKey, TValue>,它们是更好的通用版本,性能更好,并且没有值类型的装箱成本.
我有一篇博文比较了这里可能有用的每个通用容器的各种优点:
虽然它特别讨论了通用集合,但ArrayList 的复杂性成本与List<T> 和Hashtable 与Dictionary<TKey, TValue> 相似
【讨论】:
哈希表会将字符串值映射到哈希表中的值。数组列表按编号顺序放置一堆项目。
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
【讨论】:
顾名思义,一个 ArrayList(或一个 List)是用一个 Array 来实现的……事实上,一个 Hashtable 也是用相同的数据结构来实现的。所以他们都有一个恒定的访问成本(最好的)。
你需要考虑的是你需要什么样的钥匙。如果您的数据必须使用任意键(例如,字符串)访问,您将无法使用 ArrayList。此外,如果键(或多或少)不相关,则 Hashtable 应该是您的首选。
希望对你有帮助。
【讨论】: