2

我刚读

“任何实现 IEqualityComparer 接口的类都应该提供Equals方法的实现。” -(德尔福文档维基

“任何实现 IEqualityComparer 接口的类都应该提供GetHashCode方法的实现。” -(德尔福文档维基

TDictionary<TObject, TObject>如果我创建一个而不实现一个 IEqualityComparer ,TDictionary 的性能将如何?

我还没有找到默认实现(在 Delphi 2009 中)。那么如何计算它们的键的哈希码呢?

如果它只是字典条目键中对象的内存地址,是否会按顺序执行对给定条目的搜索?

4

1 回答 1

5

默认实现将使用 TObject 键执行得非常好。Equality 被定义为对象身份,与 testing 相同if A=B。哈希只是引用的地址——效率再高不过了。

代码如下所示:

function TObject.Equals(Obj: TObject): Boolean;
begin
  Result := Obj = Self;
end;

function TObject.GetHashCode: Integer;
begin
  Result := Integer(Self);
end;

在散列字典中查找不涉及搜索。这是一个高效的 O(1) 操作。我认为您应该阅读维基百科的文章。

于 2011-03-15T17:07:33.817 回答