2013-10-07 2 views
0

Arrays.deepHashCode의 동작을 이해하는 데 몇 가지 문제가 있습니다 (int[][]). 프로그램을 읽기가 쉽다고 가정합니다. A와 B는 예상대로 동일한 해시를가집니다. D도 나머지와 다릅니다. 그러나 어떤 이유로 C는 A와 B와 같습니다. C는 실제로 arrayA (및 arrayB)의 조인이지만, 이는 우연히 일치 할 수 있으며 동일한 해시 코드가 반환 된 이유는 아닙니다.2 차원 배열의 Array 클래스의 메서드 deepHashCode

int[][]에서이 방법을 사용하지 않겠습니까? 좋은 방법의 모든 제안은 동일한 정수를 반환 int[][] 내 자신의 해시 코드를 만들 경우 각 부분 배열의 각 요소는 서로 (깊은 복제와 같은 같은 위치, 같은 길이 ...)

import java.util.Arrays; 
public class Test{ 
    public static void main(String[] args){ 

      int[][] arrayA = new int[][]{ 
       {1,2,3}, 
       {4,5,6}, 
       {7,8,9} 
      }; 

      int[][] arrayB = new int[][]{ 
       {1,2,3}, 
       {4,5,6}, 
       {7,8,9} 
      }; 

      int[][] arrayC = new int[][]{ 
       {1,4,7}, 
       {2,5,8}, 
       {3,6,9} 
      }; 

      int[][] arrayD = new int[][]{ 
       {1,5,9}, 
       {2,3,7}, 
       {4,6,8} 
      }; 

      System.out.println("Deep hash codes:"); 
      System.out.println("Array A: " + Arrays.deepHashCode(arrayA)); 
      System.out.println("Array B: " + Arrays.deepHashCode(arrayB)); 
      System.out.println("Array C: " + Arrays.deepHashCode(arrayC)); 
      System.out.println("Array D: " + Arrays.deepHashCode(arrayD)); 
    } 
} 
동일한 경우에만

출력 :

Deep hash codes: 

Array A: 30729379 

Array B: 30729379 

Array C: 30729379 

Array D: 30760099 

답변

1

동일한 정수를 반환 INT [] []에 대한 내 자신의 해시 코드를 만들 수있는 좋은 방법의 어떤 제안 경우 각 부분 배열의 각 요소는 서로 (동일한 위치와 동일한 경우에만 , 같은 길이 ... 깊이 복제 된 것처럼)

그건 불가능합니다.

매우 많은 다른 정수만 있습니다. 정수 배열에는 더 많은 조합이 있습니다. 그래서 충돌이있을 것입니다.

hashCode가 할 수있는 것은 반대의 것을 보증하는 것입니다. 두 배열에 다른 hashCode가있는 경우에는 서로 다릅니다.

+0

물론 이해할 수 있습니다. 수업에 감사드립니다! –

+0

같은 hashCode를 가지는 전치 배열에 관해서는, Javadoc로 지정된 배열 # deepHashCode에서 hashCode를 계산하는 데 사용 된 공식을 볼 수 있습니다. – Thilo