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を使いたい。
'Math.abs(value)'には注意が必要です。必ずしもそうではありません。 – harold
Integer.parseInt(value)はより良いオプションですか?他にどんな選択肢がありますか? – AmyF
'parseInt'は全くオプションではありませんが、' value&Integer.MAX_VALUE'や 'value >>> 1'は間違いなく非負になります。 Java9では、Integer.remainderUnsignedを使用して、ハッシュから少しビットを捨てなければならないことを避けることができます。または他のオプション: 'if(value <0)value^= -1;' – harold