2016-07-07 9 views
5

私の友人は、今日インタビューの質問について私に聞いていました。ハッシュマップで再ハッシュを避けることはできますか?

ハッシュマップを防止/回避する方法はありますか?インタビュアーは、私はHashMapのコードに探してみましたとすぐそれが負荷率に当たるとして、それが負荷率を設定する

をリハッシュのように見えるリハッシュが

を回避することが可能なフックがあるという手がかりを与えました高い値は、誰かがそれが

+0

初期容量を、格納されるアイテムの最大数を負荷率で割った値より大きくしますか? – immibis

+0

はい、負荷係数を調整します。そして、はい、追加する要素の数を知っていれば、完全に回避することしかできません。 –

+6

一言...見込み客がJavaランタイムのソースを記憶しているかどうかをテストしたい別のインタビュアー...私はちょうどこのような質問をしているのが分かりません。 – ajb

答えて

5

はい、それはAVことができる助けることができる正しい方向に私を指すことができた場合は、そのすべての可能性で

を焼き直し防ぐために、場合

が混乱しています再ハッシュプロセスを遅らせることができますハッシュマップのサイズを事前に知っ

セットloadFactor = 1

initialCapacity = size of hashmap + 1(デフォルト値は16である)(デフォルト値は0.75です)。

はこれが原因のHashMapクラスから以下のコードで動作しますが、条件(size >= threshold)が満たされることはありませんので、ハッシュテーブルのサイズが変更されることはありません

public HashMap(int initialCapacity, float loadFactor) 

あなたのハッシュマップをインスタンス化するために、次のコンストラクタを使用します。

void addEntry(int paramInt1, K paramK, V paramV, int paramInt2) 
{ 
    if ((size >= threshold) && (null != table[paramInt2])) 
    { 
     resize(2 * table.length); 
     paramInt1 = null != paramK ? hash(paramK) : 0; 
     paramInt2 = indexFor(paramInt1, table.length); 
    } 
    createEntry(paramInt1, paramK, paramV, paramInt2); 
} 
関連する問題