TDictionary的默认IEqualityComparer <tobject,tobject =“”>?</tobject,>

时间:2011-03-15 17:03:36

标签: performance delphi generics tdictionary

我刚看完

  

“任何实现该类的类   IEqualityComparer接口是   预计将提供实施   对于等于方法。“ - (Delphi DocWiki

  

“任何实现该类的类   IEqualityComparer接口是   预计将提供实施   对于 GetHashCode 方法。“ -   (Delphi DocWiki

如果我创建TDictionary<TObject, TObject>并且没有实现IEqualityComparer,那么TDictionary的性能如何?

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

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

1 个答案:

答案 0 :(得分:5)

使用TObject键可以很好地执行默认实现。平等被定义为对象标识,与测试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)操作。我想你应该阅读Wikipedia文章。