2

読んだだけ

「IEqualityComparer インターフェイスを実装するすべてのクラスは、Equalsメソッドの実装を提供することが期待されています。」- ( Delphi DocWiki )

「IEqualityComparer インターフェイスを実装するすべてのクラスは、GetHashCodeメソッドの実装を提供することが期待されています。」- ( Delphi DocWiki )

TDictionary を作成して IEqualityComparer を実装しない場合、TDictionary のパフォーマンスはどうなりますTDictionary<TObject, TObject>か?

デフォルトの実装が見つかりませんでした (Delphi 2009)。では、それらのキーのハッシュ コードはどのように計算されるのでしょうか。

それが単に Dictionary エントリ キー内のオブジェクトのメモリ アドレスである場合、特定のエントリの検索は順番に実行されますか?

4

1 に答える 1

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) 操作です。ウィキペディアの記事を読んだほうがいいと思います。

于 2011-03-15T17:07:33.817 に答える