When to use a HashTable
在C中,我发现自己99%的时间都在使用
编辑:
正如所指出的,某人想对收集做什么,往往决定了应该使用什么,所以您什么时候使用
可能与ops问题没有直接关系,但是有一篇有用的博客文章,关于在:sortedsets使用哪个收集结构
基本上,您想对集合做什么决定了应该创建什么类型的集合。
要更详细地总结:
- 如果希望能够枚举和/或修改集合(通常在列表末尾添加),请使用ilist。
- 如果只想枚举集合,请使用IEnumeration(不需要添加/删除-通常用作返回类型)
- 如果要通过键访问元素,请使用IDictionary(使用键快速添加/删除元素)
如果要按预定义顺序访问集合,请使用SortedSet(最常见的用法是按顺序访问集合)
总的来说,如果您不想以特定的顺序按键访问/修改项目,请使用字典(优先于按顺序执行的列表,优先于不能修改枚举的枚举,优先于未严格键入的哈希表,不需要排序键时优先于排序列表)
当需要基于键快速查找对项的访问时,可以使用哈希表(字典)。
如果您使用的是
下面是一个描述不同数据类型的链接。
另一个链接。
当您需要能够(快速)按键查找项目时,使用
当然,您可以通过
如果您经常"为集合中的某个内容"而不关心集合中项目的顺序,那么哈希表是很好的选择。
哈希表是索引。您可以维护一个哈希表来索引一个列表,这样您可以选择按顺序访问它,也可以根据键随机访问它。
哈希表优化查找。它计算您添加的每个键的散列值。然后,它使用这个哈希代码快速查找元素。它是旧的.NET框架类型。它比一般字典类型慢。
在不知道集合的用途的情况下,无法准确地判断,但除非集合中的项是唯一的,否则不能使用哈希表,因为没有任何项可以用作键。因此,您要寻找的经验法则可能是,如果您的成员都不同,并且您希望按键拉出各个实例,那么可以使用哈希表。如果你有一堆你想用同样的方法处理的项目(比如在整个集合中做一个foreach),使用一个列表。
我经常使用哈希表通过页面方法将键/值集合发送回JavaScript。
当您需要根据对象的ID检索对象,但不想访问数据库时,字典很适合缓存对象:假设您的集合不够大,无法引发大量冲突,并且您的数据需要经常检索,以使IEnumerable速度过慢,则字典可以提供相当快的速度。
你不是真的在比较相同的东西,当我使用字典的时候,是因为我想查找数据,通常我想存储一个对象列表,我想能够使用某种键快速查找它们。