1

使用しているSDKにはハッシュテーブルがないため、独自のチェーンハッシュテーブルを実装しています。これは理論上の質問なので、コードと言語は関係ありません。質問は次のとおりです。

キーに対して GET 要素/オブジェクトを実行し、連鎖ハッシュテーブルにこのキーに対して 2 つのオブジェクトがある場合、どちらを返しますか? 配列?GET関数は配列を返しますか?要素が1つしかない場合はどうなりますか? Get 関数も配列を返すのですか? ユーザーに対して可能な限り透過的にしようとしています。

リンクされたハッシュテーブルの関数プロトタイプがどのように見えるかについて、any1は何か情報を持っていますか?

4

2 に答える 2

2

それはアプリケーションによって異なります。通常、同じキーを持つハッシュ テーブルに複数の異なるエントリが存在することは許可されません (同じキーを持つエントリを挿入した場合は、既存のキーと値のペアを新しいキーと値のペアに置き換えます)。

同じキーに関連付けられた複数の値をサポートしている場合は、最適なものを使用してそれらすべてを返すことはまったく問題ありません。おそらく、複数の値を含むか、1 つの値だけを含む配列を返すことができます。もう 1 つのオプションは、同じキーを持つ値のペアの範囲にまたがるイテレータのペアを返すことです (C++ で採用されているアプローチstd::unordered_multimap)。

関数プロトタイプに関しては、言語によって異なります。通常、それらは次のようになります (Java っぽい表記法で):

boolean add(KeyType key, ValueType value);
boolean containsKey(KeyType key);
boolean remove(KeyType key);
int size();
ValueType get(KeyType key);
Iterator keyIterator();
Iterator valueIterator();

お役に立てれば!

于 2013-01-07T05:31:28.613 に答える
1

あなたが反対票を投じられた理由は完全にはわかりませんが、それは悪い質問ではありません.

データ構造をより完全に理解できるように、オンラインでグーグル検索と調査を行うことをお勧めします。

この記事をお勧めします: http://www.algolist.net/Data_structures/Hash_table/Chaining

最初の例では、基本的なリンク リスト チェーンを使用していることがわかりますが、オープン アドレッシングも別のオプションです。

戻り値に関しては、一貫性があり、チェーンメソッドを採用している場合は常にリストを返します(1つしか存在しない場合は単一の値ではなく)。呼び出しコードは常にリストを受け取り、それを反復処理することが期待できます。コンテンツ - 1 つ以上の結果であれば、簡単に処理できます。ただし、複数の値または単一の値のリストを返す場合、その方法は一貫しているとは言えません (そのように文書化しない限り)。

それが役立つことを願っています!

于 2013-01-07T03:13:12.413 に答える