我刚读
“任何实施
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/