4

私の仕事は、銀行管理システムを行うことです。クライアントの口座は、ハッシュ テーブルを使用して銀行内に保持されるため、個人識別番号で表されるクライアントごとに、口座の配列リストが存在します (クライアントは最大 2 つの口座 (貯蓄口座と支出口座) を持つことができます)。 )。

私がしなければならないことは、発生する可能性のある衝突を手動で処理することです。どうやってやるの?どのメソッドをオーバーライドする必要がありますか? C で HashTables を扱うのは難しかったので、HashTables は私の好みではないことを述べておかなければなりません。

PS - HashMap を使用することを計画しています。

編集- 手動の衝突処理は必須です。

編集 2 - ラボ アシスタントがハッシュ テーブルのしくみを理解することを望んでいるため、必須です。さらに掘り下げた後、Hashtableの「equals」メソッドをオーバーライドする必要があると思うので、HashMapはありません。それは正しいアプローチですか?(新しい ADT は必要ありません)

4

2 に答える 2

3

標準のハッシュ テーブルの実装では、衝突処理が自動的に行われ、それを制御することはできません。ただし、キーとして使用されるオブジェクトに対してhashCode()andを実装する必要がありますが、/の場合、それは標準ライブラリによって既に行われています。そのため、タスクが本当に衝突を処理する必要がある場合は、独自の実装を構築する必要があります。equals()StringNumberMap

于 2012-04-29T10:34:53.727 に答える
2

私がしなければならないことは、発生する可能性のある衝突を手動で処理することです。どうやってやるの?

独自の衝突処理を行うことが難しい要件である場合は、ハッシュ テーブルを最初から実装する必要があります。HashMapまたはHashTable、私が知っている他の既存のクラスを使用することはできません...それらはすべて衝突などを処理するためです。

C で HashTables を扱うのは難しかったので、HashTables は私の好みではないことを述べておかなければなりません。

残念です。この演習を完了するには、それらを理解する必要があります。(考え直してみると、おそらくこの要件は良いことです...ハッシュテーブルがどのように機能するかを正しく理解する必要がある場合)。

記録として、ハッシュ テーブルがどのように機能するかを説明するデータ構造に関する優れたテキストが多数あります。教科書がない場合は、ウィキペディアのページがかなり包括的です。教科書とウィキペディアの両方で、衝突を処理するためのさまざまなテクニックが説明されています。


さらに掘り下げた後、Hashtable の「equals」メソッドをオーバーライドする必要があると思われるため、HashMap はありません。それは正しいアプローチですか?(新しい ADT は必要ありません)

私はそうは思わない。

  • /のequalsメソッドは、ハッシュ テーブル エントリの衝突処理とは関係ありません。HashtableHashMap

  • Hashtable/の衝突検出ロジックはHashMapプライベート メソッドにあるため、直接オーバーライドすることはできません。

ラボ アシスタントは、ハッシュ テーブル ADT を実装することを望んでいる/期待していると思いますが、これを回避する方法がわかりません。でも、ラボのアシスタントに、あなたに何を期待しているのかいつでも尋ねることができます。


おまけのアドバイス: マップのターゲット タイプは、2 つのアカウントへの参照とユーザーの個人情報を保持するカスタム クラスにする必要があります。であってはなりませんArrayList

于 2012-04-29T10:05:50.703 に答える