HashTableは同じキーを複数の値にマップできることを読んだ。それが衝突です。なぜ私のHashTableはキーの衝突を許さないのですか?
は今、私はこのようなプログラムを実行します。
Dictionary<String,String> hTable = new Hashtable<String,String>();
hTable.put("a", "aa");
hTable.put("a", "ab");
System.out.println(""+hTable.get("a"));
私の思考は、私がaa
とab
を取得する必要がありますと言います。
しかし、実際の出力は、なぜそれがそうであるab
のですか?その後、衝突はどこにありますか?
衝突は内部実装の詳細であり、2つのキーが同じ方法でハッシュしたときに、同じキーが複数回使用されたときではありません。 @Mehrdadが指摘しているように、それらは透過的に解決されます(モジュロパフォーマンスの低下)。そうでない場合は、単一のキーの複数の値ではなく、他のキー(同じ表のセルにハッシュされたキー)によって不思議に上書きされるキーがあります。 –
@Lauenece:私は1)2つのキーが同じ方法でハッシュするときに行う必要がある2)1つのキーの複数の値ではなく、他のキーで不思議なように上書きされるキー。もう少し説明してください。 – user900721
私は本当にそれをコメントの空間にはっきりと説明することはできません。良いアルゴリズムの本や、おそらくWikipediaの記事http://en.wikipedia.org/wiki/Hash_tableのハッシュテーブルについて読んでみてください。これらは実装の詳細です。 'Hashtable'クラスを*使用するだけの場合は、これらの詳細を知る必要はありません。インタフェース/契約を理解するだけです。 'Hashtable'は' Dictionary'を拡張して 'Dictionary'の契約に従い、' Dictionary'の文書は '任意の' Dictionary'オブジェクトの中で、全てのキーが最大一つの値に関連していると言います。 –