我刚看完
“任何实现该类的类 IEqualityComparer接口是 预计将提供实施 对于等于方法。“ - (Delphi DocWiki)
和
“任何实现该类的类 IEqualityComparer接口是 预计将提供实施 对于 GetHashCode 方法。“ - (Delphi DocWiki)
如果我创建TDictionary<TObject, TObject>
并且没有实现IEqualityComparer,那么TDictionary的性能如何?
我没有找到默认实现(在Delphi 2009中)。那么如何计算密钥的哈希码呢?
如果它只是Dictionary条目键中对象的内存地址,是否会按顺序执行搜索给定条目?
答案 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文章。