3

一意の整数であることに加えて、に挿入できるhashValue迅速なタイプの選択に関するパフォーマンス上の考慮事項はありますか? たとえば、選択した整数値のサイズはバッキング配列のサイズに影響しますか? つまり、型に ofを割り当ててそれを a に挿入した場合、バッキング配列は少なくとも長さが必要ですか?HashableSethashValue4000HashableSet4000

4

1 に答える 1

5

hashValue一意である必要はありません。ほとんどの場合、一意にすることはできません (64 ビットより大きい型は、必ずそのハッシュよりも多くの状態を持つことができます)。整数のサイズは選択しません。それは常にInt(機械語のサイズです)です。

hashValueただし、高速である必要があり、理想的には O(1) です。これは、等値チェックを最適化するためによく使用されます (非常に遅い場合があります)。

の最も単純な実装hashValueは次のとおりです。

var hashValue: Int { return 1 }

これは完全に有効なハッシュです。これは特に優れたハッシュではありませんが、すべての要件を満たしています。計算は高速であり、すべての等しいオブジェクトは等しいハッシュを持ちます (これは要件です。逆は必要ありません。等しいハッシュは等しいオブジェクトを意味しない場合があります)。

于 2016-10-21T22:47:20.187 に答える