我刚读


“任何实施
IEqualityComparer接口是
有望提供实施
等于Equals方法。”-(Delphi DocWiki





“任何实施
IEqualityComparer接口是
有望提供实施
用于GetHashCode方法。”-
Delphi DocWiki


如果创建TDictionary<TObject, TObject>但未实现IEqualityComparer,则TDictionary的性能如何?

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

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

最佳答案

使用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文章。

关于performance - TDictionary <TObject,TObject>的默认IEqualityComparer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5315258/

10-08 23:15