1

いくつかの投稿で私が読んだ:

ConcurrentHashMap は、loadfactor に基づいて近接性によって要素をグループ化します

  1. このグループ化はどのように行われますか?

  2. hashCode()常に 1 を返すように関数をオーバーライドするとしましょう。では、ConcurrentHashMap への挿入に影響を与える、より高い値とより低い値はどのようになりますか?loadfactor

  3. 関数をオーバーライドhashCode()して、常に異なるハッシュコードを返すようにします。ConcurrentHashMap への挿入に影響を与える、より高い値とより低い値はどのようになりますか?loadfactor

4

1 に答える 1

0

ハッシュマップは基本的にリストの配列です。たとえば、特定のハッシュマップに 100 個のリストの配列があるとします。何かを追加すると、そのオブジェクトの hashCode が計算されます。次に、その値のモジュラスとリストの数 (この場合は 100) を使用して、追加するリストを決定します。したがって、ハッシュコード 13 のオブジェクトを追加すると、リスト 13 に追加されます。ハッシュコード 12303512 のオブジェクトを追加すると、リスト 12 に追加されます。

負荷係数は、リストの数を増やすタイミングをハッシュマップに伝えます。マップ全体のアイテム数と現在の容量に基づいています。

ハッシュコードが常に 1 を返す最初のシナリオでは、リストの数に関係なく、オブジェクトは同じリストになります (これは悪いことです)。2 番目のシナリオでは、オブジェクトはリスト全体でより均等に分散されます (これは良い。)

負荷係数は、リストのサイズではなく、マップの全体的なサイズに基づいているため、ハッシュコードの品質は実際には負荷係数と相互作用しません。最初のシナリオでは、2 番目のシナリオと同じように成長しますが、関係なくすべてが同じリストになります。

于 2016-01-06T17:47:11.330 に答える