JavaでのHashMapとHashtableの違い
コンテンツ
HashMapとHashtableは両方とも、 オブジェクトのグループ で表されている
以下に示す比較チャートを見て、HashMapとHashtableの違いをさらに見てみましょう。
- 比較表
- 定義
- 主な違い
- 類似点
- 結論
比較表
比較の根拠 | ハッシュマップ | ハッシュ表 |
---|---|---|
実装/拡張 | HashMapクラスはMapインターフェースを実装し、AbstractMapクラスを拡張します。 | HashtableはDictionary Legacyクラスを拡張しますが、再設計され、Mapインターフェイスも実装するようになりました。 |
同期 | HashMapは非同期であるため、HashMapオブジェクトはスレッドセーフではありません。 | Hashtableは同期されているため、Hashtableのオブジェクトはスレッドセーフです。 |
キー/値 | キーは一度だけNullを返すことができますが、値は何回でもNullを返すことができます。 | キーは、ハッシュテーブルのインデックスとして使用されるハッシュコードを取得するために使用されるため、Nullを返すことはできません。また、値はNullを返すこともできません。 |
デフォルトの初期容量 | HashMapのデフォルトの初期容量は16です。 | Hashtableのデフォルトの初期容量は11です。 |
横断 | HashMapはIteratorによって走査されます。 | Mapクラスと同様に、Hashtableも走査用のIteratorを直接サポートしていないため、Enumeratorを使用します。 |
HashMapの定義
HashMapは、を実装するクラスです 地図 インターフェースと拡張 AbstractMap クラスはハッシュテーブルを使用します。 HashMapのオブジェクトは、コレクション/セットを参照します / * Kはキーを表し、Vは値を表します* / class HashMap 最初のコンストラクターは、HashMapの空のオブジェクトを初期化するデフォルトのコンストラクターであり、デフォルトの容量は16、デフォルトの充填率は0.75です。 2番目のコンストラクターは、mの値でハッシュマップを初期化します。 3番目のコンストラクターは、引数 "capacity"で指定された値に対応する初期容量を持つハッシュマップを作成します。 4番目のコンストラクターは、パラメーターで指定された容量と充足率でハッシュマップを初期化します。ハッシュマップのエントリをフィードする方法を学びましょう。 ハッシュマップhm = new Hashmap(); hm.put( "Ajay"、275); hm.put( "Vijay"、250); hm.put( "Jonny"、150); hm.put( "Jordan"、200); System.out.ln(hm); / * output * / {Vijay = 250、Jonny = 150、Ajay = 275、Jordan = 200} 上記のコードでは、空のHashMapオブジェクトを作成したことがわかります。 hm デフォルトの初期容量とデフォルトの充填率で。次に、キーを値にマップするput(K、V)メソッドを使用して、ハッシュマップに4つのエントリを挿入しました。挿入順序が固定されていないため、入力した順序でエントリが編集されないことがわかります。今、あなたがすでにエントリを持っている場合を考えてみましょう ハッシュテーブルは、 辞書 レガシークラスであり、実装するために再設計されたクラス 地図 インタフェース。 Hashtableは、データ構造としてハッシュテーブルを使用します。 HashtableはHashMapに似ていますが、ここでもHashtableのオブジェクトは各エントリが次のペアであるエントリのコレクションを参照します / * Kはキーを指定し、Vはキーに関連付けられた値を指定します* / class Hashtable 上記のコードでは、最初のコンストラクターはクラスHashtableの空のオブジェクトを作成するデフォルトコンストラクターであり、デフォルトのサイズは11、デフォルトの充填率は0.75です。 2番目のコンストラクターは、パラメーター「size」で指定された値に対応するサイズのハッシュテーブルを作成します。 3番目のコンストラクターは、パラメーターで指定されたサイズと塗りつぶし率でハッシュテーブルを作成します。 4番目のコンストラクターは、値mでハッシュテーブルを初期化します。挿入方法を学びましょう Hashtable ht = new Hashtable(); ht.put(new hashCode(2)、275); ht.put(new hashCode(12)、250); ht.put(new hashCode(16)、150); ht.put(new hashCode(8)、200); System.out.ln(ht); / * output * / {12 = 250、16 = 150、2y = 275、8 = 200} 上記のコードでは、Hashtableの空のオブジェクトを作成し、put()メソッドを使用して4つのエントリを挿入しました。 putメソッド内で、hashCode()を呼び出しました。これは、エントリオブジェクトのインデックス値として機能するハッシュコード値を計算して返します。ご覧のとおり、ハッシュテーブルのサイズについては言及しなかったため、デフォルトでは11になります。ここでも、挿入順序は保持されないため、edエントリが順番に表示されない場合はフィードされました。 HashMapは、オブジェクトが同期されておらず、複数のスレッドが同時に操作できるため、パフォーマンスが向上し、Hashtableよりも高速です。ハッシュテーブルの定義
類似点:
結論: