ハッシュテーブルクラス
ハッシュテーブルはマップインターフェイスを継承し、キー価値マッピングを備えたハッシュテーブルを実装します。非ヌルオブジェクトは、キーまたは値として使用できます。
put(key、value)を使用してデータを追加し、Get(key)を使用してデータを取得します。これら2つの基本操作のオーバーヘッドは一定です。
ハッシュテーブルは、初期容量と負荷因子パラメーターを通じてパフォーマンスを調整します。通常、デフォルトの負荷係数0.75は、時間とスペースのバランスをより適切に実現できます。負荷係数を増やすとスペースを節約できますが、対応する検索時間は増加し、GetやPutなどの操作に影響します。
ハッシュテーブルを使用する簡単な例は次のとおりです。1、2、および3をハッシュテーブルに入れ、それらのキーはそれぞれ「1」、「2」、「3」です。
Hashtable numbers = new Hashtable(); numbers.put( "one"、new Integer(1)); numbers.put( "2"、new Integer(2)); numbers.put( "3"、new Integer(3));
2などの番号を取得するには、対応するキーを使用します。
integer n =(integer)numbers.get( "2"); system.out.println( "2 =" + n);
キーとしてのオブジェクトは、ハッシュ関数を計算することにより対応する値の位置を決定するため、キーとしてのオブジェクトはハッシュコードを実装し、メソッドに等しくなります。ハッシュコードと等しいメソッドは、ルートクラスオブジェクトから継承されます。カスタムクラスをキーとして使用する場合は、非常に注意してください。ハッシュ関数の定義によれば、2つのオブジェクトが同じ場合、つまりobj1.equals(obj2)= trueである場合、ハッシュコードは同じでなければなりませんが、2つのオブジェクトが異なる場合、ハッシュコードは変わらない場合があります。 2つの異なるオブジェクトのハッシュコードが同じ場合、この現象は競合と呼ばれます。競合により、ハッシュテーブルの操作の時間オーバーヘッドが増加します。したがって、HashCode()メソッドを定義して、Hashテーブルの動作を高速化してください。
同じオブジェクトに異なるハッシュコードがある場合、ハッシュテーブルの操作には予期しない結果が得られます(予想されるGETメソッドはnullを返します)。この問題を回避するには、1つのことを覚えておく必要があります。そのうちの1つを書くのではなく、同時にHashcodeメソッドを書き直す必要があります。
ハッシュテーブルは同期されます。
ハッシュマップクラス
ハッシュマップはハッシュテーブルに似ていますが、違いは、ハッシュマップが非同期であり、null、つまりヌル値とヌルキーを可能にすることです。ただし、ハッシュマップがコレクション(値()メソッドがコレクションを返すことができる)と見なされる場合、その反復サブオペレーション時間オーバーヘッドはハッシュマップの容量に比例します。したがって、反復操作のパフォーマンスが非常に重要である場合、ハッシュマップの初期化容量を高すぎるように設定しないか、負荷係数が低すぎないようにしないでください。
要約します