組み込みの java.util.hashtable を使用してプログラムを作成しましたが、別の連鎖を使用して衝突を解決する必要があります。このハッシュテーブルの実装で可能ですか? 別のチェーンを使用する実装済みのものはありますか?
1 に答える
Hashtable実装のソースを見ると、すでに個別のチェーンを使用しているように見えます。901行目から始まるクラスを見ると、Entry<K,V>
という名前の別のエントリへの参照があることがわかりますnext
。次にメソッドを見ると、put()
420行目でnext
、コンストラクターを介して参照が入力され、そのバケットに以前に格納されていた要素になります。
通常、これらのような実装の詳細について心配する必要はないことに注意してください。Javaコレクションフレームワークは、おそらくJavaで最も広く使用されているフレームワークの1つであるため、作成者がパフォーマンスを最高の状態に調整したと想定する必要があります。
私が指摘したいもう1つのことは、Hashtableクラスがほとんどクラスに置き換えられていることですHashMap
(これも個別のチェーンを使用します。ここを参照してください)。2つの主な違いは、のすべてのメソッドHashtable
が同期されているのに対し、では同期されHashMap
ていないことです。これにより、シングルスレッド環境で実行している状況でのパフォーマンスが向上します(おそらくこの質問の理由は?)。
スレッドセーフなマップの実装が必要な場合は、への呼び出しで法線をラップするか、を使用することを検討する必要がHashMap
ありCollections.synchronizedMap()
ますConcurrentHashMap
。