【发布时间】:2015-11-20 17:23:02
【问题描述】:
我不明白编译器如何足够聪明地为 MyObject 构建 O(1) 查找,我可以将 anything 放入其中
public class MyObject
{
// ...
}
我了解如何为有限数量的非原始对象完成此操作,例如
public class MyObject
{
int i { get; set; }
char c { get; set; }
}
但它怎么可能知道如何为MyObject 的任何实现执行此操作?
【问题讨论】:
-
它是通过将一个对象变成一个数字来完成的。然后将其用作集合中的索引。谷歌“哈希函数”并阅读您最喜欢的有关 Object.GetHashCode() 的 C# 语言书籍。
-
我认为这不足以将其标记为重复,但我深入解释了 Dictionary(和 HashSet)如何使用哈希码进行 O(1) 查找in this answer
-
Protip:如果你创建一个
struct,这一切都是免费的:D -
不,你不明白如何为有限数量的非原始人做到这一点。您将使用 MyObject 进行 0(1) 查找。问题是具有相同 i can c 的两个 MyObject 将不相等。它们将是 HashSet 中的两个条目。
标签: c# .net data-structures