【发布时间】:2013-10-13 12:51:51
【问题描述】:
我在理解Arrays.deepHashCode 在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
【问题讨论】: