2017-12-10 1 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; 
     } 
    } 
} 
나는 50 % 증가 내 재탕() 메소드를 변경 얼마나

?

어딘가에 int로 캐스팅해야한다고 가정하고 있지만 제대로 작동하지 않습니다. 나는 ArrayList가 아니라 ArrayList를 사용하고 싶다.

+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

관련 문제