1. ホーム
  2. java

[解決済み] Java HashMapの衝突解決

2023-05-30 05:32:35

質問

Java HashMap 使用 put メソッドを使用して、K/V ペアを HashMap . 例えば、私が put メソッドを使って、今は HashMap<Integer, Integer> には1つのエントリがあり key を10とし value を17とする。

この中に10,20を挿入すると HashMap を挿入すると、同じキー10であるために衝突して、前のエントリがこのエントリに置き換えられるだけです。

キーが衝突した場合 HashMap は古いK/Vのペアを新しいK/Vのペアに置き換えます。

そこで私の疑問は、いつ HashMap はどのような場合に使用するのでしょうか?

を形成しなかった理由 linkedlist を形成しなかったのでしょうか?

どのように解決するのですか?

ペアを挿入する場合 (10, 17) となり、次に (10, 20) を実行する場合、技術的には衝突は起こりません。与えられたキーに対して、古い値を新しい値で置き換えているだけです。 10 の新しい値に置き換えているだけです (どちらの場合も 10 は 10 と等しく、また 10 のハッシュコードは常に 10 であるため)。

衝突は、複数のキーが同じバケツにハッシュされたときに起こります。その場合、それらのキーを区別できるようにする必要があります。連鎖的衝突解決は、このために使われる技術の一つです。

例として、2つの文字列 "abra ka dabra""wave my wand" は、ハッシュコード 100200 にそれぞれ格納されます。配列の総サイズが10だとすると、どちらも同じバケツに入ることになります( 100 % 10200 % 10 ). チェインすることで、いつでも map.get( "abra ka dabra" ); を実行するたびに、キーに関連付けられた正しい値が得られるようになります。Javaでのハッシュマップの場合、これは equals メソッドによって行われます。