HashMapの理解(マップから)

HashMapの理解(Mapから

地図

1.重複するキーはありません(キーはセットで保存されるため、キーは一意で順序付けされていない必要があります。一方、マップの値は、2つの同一のキーがある場合、基本的にキーを通じて値を取得することです。コンピューターはどの対応する値を取得するかを認識しません。現時点では、プログラミング時にput()メソッドを使用して、同じキー値を持つ2つのキーと値のペアを渡すことができるのはなぜですか?これは、キー値がソースコードで渡されるためです。同じキーと値のペアはオーバーレイとして扱われます)

2.各キーは1つの値にのみ対応でき、複数のキーは1つの値に対応できます(これはマッピングの概念です。最も古典的な例は、アーチェリー、アーチャーの行、矢印のターゲットの行、射手は1つの矢印のターゲットのみをヒットできます。 、そして各矢ターゲットは異なる射手によって射撃されるかもしれません。ここで各射手には矢が1つしかないため、3つの矢がすべてのターゲットを同時に返すような操作はありません。射手をターゲットに接続します、この線シューターとターゲットの追加はマッピングです)

3.キーと値は、任意の参照タイプ(nullを含む)(参照タイプのみ)のデータにすることができます。

4. Mapは古代のDictionary抽象クラスを置き換えます(知っているだけで無視できます)

HashMap

  1. 基本となる実装はリンクリスト配列です。JDK8以降は、赤と黒のツリーが追加され、すべてのMapメソッドが実装されます。キーはSetで保存されるため、キー
    2 を実行します。重複は許可されません。キーに対応するクラス(通常はString)は、hashCodeを書き換える必要がありますそしてイコールメソッド
  2. 空のキーと空の値を許可します(ただし、空のキーは1つしかなく、最初に配置されます。知っておいてください)。
  3. リストアイテムの要素は順序付けられておらず、順序は時々変更されます(展開ごとに、再ハッシュされます。つまり、キーはハッシュ関数によって計算され、以前とは異なるハッシュ値が取得され、結果としてハッシュになります。テーブルの要素には順序がなく、いつでも変更されます。これは、ハッシュ関数がバケット配列の容量に関連しているためです。ノードが臨界値に達するたびに、ノードは自動的に拡張されます。拡張後、バケット配列の容量は2倍され、キー変更されない場合は、ハッシュ値も変更する必要があります
    。4挿入と取得の時間の複雑さは基本的にO(1)です(要素を均一な位置に分散できる適切なハッシュ関数がある場合)マップ全体
    走査するのに必要な時間5これは配列の長さに比例します(したがって、初期化中のHashMapの容量は大きすぎてはいけません)2つの重要な要素:初期容量、負荷係数HashMapは同期されません、HashTableは同期されますが、スレッドの安全性が必要な場合は、synchronizedMapを使用できます、Map m = Collections.synchronizedMap(new HashMap(…));などのメソッド

見積もり

元の記事を公開1件 ・いい ね0件 訪問15件

おすすめ

転載: blog.csdn.net/code_mzh/article/details/105394327