HashMapの概要
- HashMapのは、達成するために、ハッシュテーブルに基づいて、各要素はキーと値のペアで、内部で実行される単一のリスト競合を解決するために、容量不足、それはまた、自動的に増加します。
- HashMapのは、それが唯一のシングルスレッド環境、マルチスレッド環境で使用することができ、スレッドセーフでされていないとの同時契約のconcurrenHashMap下で使用することができます。
- HashMapの実装Serializableインタフェースは、シリアル化がクローニングされ、Cloneableインタフェースを実現しサポートしています。
- ストアドプロシージャの原則:
内部には、競合を解決するために、リストを使用してエントリ、HashMapののデータ・ストレージ・アレイを維持片方向リンクリスト上の各エントリの本質である場合、まず、キーと値のペアを追加する準備ができハッシュ値ハッシュ(キー)法により算出各キーと値のペアがハッシュマップに格納することができることを確認ハッシュ&0x7FFFFFFFで、再度モジュロ長さを計算するための第1の方法にindexfor(ハッシュ、長さ)によって必要とされるキー値の任意の記憶位置、。
- [0]ヌルキー値ペアが常にテーブルに配置され、HashMapのキーを許可し、値がnullであるリンクされたリスト内の最初のノードです。
ストレージ構成を示しています
ハッシュテーブルについて
-Hashtableは、各要素が内部矛盾が単一のリスト、(閾値を超える)容量不足によって解決され、それも自動的に増加することがキーと値のペアであり、同じことを達成するために、ハッシュテーブルに基づきます。
-
Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。
-
ハッシュテーブルは、同様に、シリアル化がCloneableインタフェースを実現するサポートSerializableインタフェースを実装し、クローン化すること。
ハッシュテーブルとHashMapの違い
- 継承異なる親クラス
辞書のHashtableから継承されたクラス、およびクラスAbstractMapからのHashMapクラスの継承。しかし、我々は、Mapインタフェースを達成しています。
-
別のスレッドの安全性の
ハッシュマップの段落に関するJavadocは、次のように:この実装は同期されません。複数のスレッドがハッシュマップにアクセスした場合、少なくとも1つのスレッドが構造的にマップを変更しており、それは外部で同期をとる必要があります。 -
かどうかは、メソッドが含まれています
- 誤解含まれているため、メソッドハッシュテーブルのハッシュマップは、削除、およびcotainsValueとのcontainsKeyを置き換え含まれています。
- これは、同じ機能とのcontainsValueを含む、3つのメソッドをハッシュテーブルが保持されて含まれている、とのcontainsValueのcontainsKey。
- ヌル値とキーの値を許可するかどうか
の鍵オブジェクトおよび値であり、重複含めることはできません。
- ハッシュマップがnull値のペア(NULL、NULL)、Aのみを持つことができますget()メソッドがnull値を返すとき、したがって、これはヌルの値に対応するキーについても、可能なハッシュマップのキーではないかもしれません。したがって、ハッシュマップで決定するというべきでのcontainsKey()メソッドキーハッシュマップが存在するかどうかを決定するために()メソッドを得ることができません。
- ==ハッシュテーブルには、null値を許可しますが、ハッシュテーブルの操作で同様==プット(NULL、NULL)がある場合、コンパイラはまた、キーと値がObject型であるため、渡されたが、NullPointerExceptionがランタイム例外をスローすることができません表示されますこれは、JDK仕様の要件です。
-
異なる内部のトラバース
のHashtable、HashMapのは、Iteratorを使用しています。そして、歴史的な理由のために、ハッシュテーブルはまた、列挙方法を使用していました。 -
ハッシュ値が異なっており
、異なるハッシュ値で直接のhashCodeオブジェクトをハッシュテーブル。そして、ハッシュ値のHashMapを再計算。int型のハッシュコードの値は、オブジェクトアドレスまたは文字列または数に応じて算出されるJDK。
ハッシュテーブル算出したハッシュ値、直接キーにハッシュコード()、及び評価位置インデックスを使用する場合のHashMapは、ハッシュキー値、ハッシュテーブル評価位置指標ハッシュモジュロ演算に対応する値、およびHashMapを再計算し、ハッシュ値が戻っている間、おそらく負であり、そして&0x7FFFFFFFで後に、唯一外符号が変化するので、操作後、どこで通常第1のハッシュ&0x7FFFFFFFで、その後長モジュロ・オブジェクトと0x7FFFFFFFでは、正の値に変換されたハッシュ値の負でありますビットは変更されません。
ハッシュマップとHashSetの違い
HashMapのHashSetの
HashSetの実装セット・インタフェースインタフェース1.HashMap実装地図
2.HashMapストアのキーと値のペアは、のみストアオブジェクトをHashSetの
要素の要素add()メソッドのセットを使用して3 PUT()メソッド
マップを入れて
HashSetの部材を計算するために使用4.HashMapキーオブジェクトは、について算出ハッシュコード値をオブジェクト
ハッシュコード値のハッシュコードは、2つのオブジェクトのために同じであってもよく、それは(等しいです)
方法用来判断对象的相等性,如果两个对象不同
的话,那么返回false
5.HashMap速く、それはHashSetのは、HashMapのより遅い使用しているため、
1、継承異なります。公共Hashtableクラスは、辞書実装地図を拡張します
パブリッククラスHashMapのはAbstractMapの実装地図を拡張します
2.方法のHashtableは同期され、そしてHashMapのデフォルトのメソッドは非同期です。マルチスレッド環境では、我々は同期プロセスを増やす必要があり、直接のHashtable、HashMapを使用することができますが、自分自身を使用します。
図3は、キーと値のハッシュテーブルは、NULL値が発生しないようにしてください。
ハッシュマップでは、ヌルキーとして、唯一のそのような結合;ヌルの値に対応する1つまたは複数のキーを有することができます。get()メソッドがnull値を返した場合、すなわち、ハッシュマップのキーを表していないことがあり、それは、結合がヌルの対応する値とすることができることを示しています。したがって、ハッシュマップで決定するというべきでのcontainsKey()メソッドキーハッシュマップが存在するかどうかを決定するために()メソッドを得ることができません。
図4に示すように、トラバースの内側の2つの異なる実装。
ハッシュテーブルは、HashMapのは、Iteratorを使用しています。そして、歴史的な理由のために、ハッシュテーブルはまた、列挙方法を使用していました。
図5は、異なるハッシュ値が、オブジェクトはハッシュテーブルハッシュコードとして使用されます。HashMapのは、ハッシュ値を再計算します。
図6に示すように、アレイは、二つの内部ハッシュテーブルとHashMapの実装は、初期サイズと拡張モードです。ハッシュテーブルのハッシュアレイ11は、やり方を大きくすると、* 2 + 1古いです、デフォルトのサイズです。デフォルトのHashMapのハッシュアレイ16の大きさ、及び2の累乗でなければなりません