Arrays.deepHashCode
onの動作を理解するのに問題がありますint[][]
。プログラムは読みやすいと思います。A と B のハッシュは予想どおり同じです。Dも他とは違います。しかし、何らかの理由で、C は A および B と同じです。C は実際には arrayA (および arrayB) の転置ですが、これは偶然の一致であり、同じハッシュ コードが返される理由ではない可能性があります。
でこのメソッドを使用することは想定されていませんint[][]
か? int[][]
各サブ配列の各要素が互いに等しい場合にのみ、等しい整数を返す独自のhashCodeを作成するための良い方法の提案(同じ位置、同じ長さ...ディープクローンのように)
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