2017-12-10 6 views
0

配列のサイズを50%に変更してから再ハッシュしようとしています。私は現在、配列のサイズを倍にして再ハッシュしていますが、どのようにして50%(100%)増加するのか分かりません。ここで配列を50%サイズ変更する方法

は、私のコードの私の一部です:

private int hashFunction(int value) { 
    return Math.abs(value) % elementData.length; 
} 

private double loadFactor() { 
    return (double) size/elementData.length; 
} 

// Resizes the hash table to twice its former size. 
private void rehash() { 
    // replace element data array with a larger empty version 
    HashEntry[] oldElementData = elementData; 
    elementData = new HashEntry[2 * oldElementData.length]; 
    size = 0; 

    // re-add all of the old data into the new array 
    for (int i = 0; i < oldElementData.length; i++) { 
     HashEntry current = oldElementData[i]; 
     while (current != null) { 
      add(current.data); 
      current = current.next; 
     } 
    } 
} 
Iが50%増加すると私の焼き直し()メソッドを変更する方法を

私はどこかでint型にキャストする必要があると思っていますが、動作させることはできません。私はArrayListではなくArrayを使いたい。

+0

'Math.abs(value)'には注意が必要です。必ずしもそうではありません。 – harold

+0

Integer.parseInt(value)はより良いオプションですか?他にどんな選択肢がありますか? – AmyF

+0

'parseInt'は全くオプションではありませんが、' value&Integer.MAX_VALUE'や 'value >>> 1'は間違いなく非負になります。 Java9では、Integer.remainderUnsignedを使用して、ハッシュから少しビットを捨てなければならないことを避けることができます。または他のオプション: 'if(value <0)value^= -1;' – harold

答えて

0

あなたはこのような何かをライン

elementData = new HashEntry[2 * oldElementData.length]; 

を変更できませんでした:increaseはあなたが好きなパーセントの増加である

elementData = new HashEntry[(int)increase * oldElementData.length]; 

。したがって、サイズを50%増やしたい場合は、1.5を使用します。

+0

あなたはそこにいくつかのかっこがありません – harold

関連する問題