如何让这个HashMap <integer [],integer =“”>以我想要的方式工作?

时间:2015-07-02 19:40:28

标签: java hashmap

在我的程序中,我想使用一个Integer []的HashMap,但我在检索数据时遇到了问题。经过进一步调查后,我发现程序中没有任何其他内容会打印null

HashMap<Integer[], Integer> a = new HashMap<Integer[], Integer>();
Integer[] b = {5, 7};
Integer[] c = {5, 7};
a.put(b, 2);
System.out.println(why.get(c));

如果我不必,我不想用a.keySet()遍历HashMap。有没有其他方法可以达到预期的效果?

2 个答案:

答案 0 :(得分:3)

数组基于从对象本身计算的散列而存储在映射中,而不是基于其中包含的值(使用==和使用数组的equals方法时会发生相同的行为)。

你的密钥应该是一个正确实现.equals和.hashCode而不是普通数组的集合。

答案 1 :(得分:0)

检查此代码是否有/所需行为:

// this is apparently not desired behaviour
{
    System.out.println("NOT DESIRED BEHAVIOUR");
    HashMap<Integer[], Integer> a = new HashMap<Integer[], Integer>();
    Integer[] b = { 5, 7 };
    Integer[] c = { 5, 7 };
    a.put(b, 2);
    System.out.println(a.get(c));
    System.out.println();
}
// this is the desired behaviour
{
    System.out.println("DESIRED BEHAVIOUR");
    HashMap<List<Integer>, Integer> a = new HashMap<List<Integer>, Integer>();
    int arr1[] = { 5, 7 };
    List<Integer> b = new ArrayList<Integer>();
    for (int x : arr1)
        b.add(x);

    int arr2[] = { 5, 7 };
    List<Integer> c = new ArrayList<Integer>();
    for (int x : arr2)
        c.add(x);

    System.out.println("b: " + b);
    System.out.println("c: " + c);
    a.put(b, 2);
    System.out.println(a.get(c));
    System.out.println();
}

<强>输出:

NOT DESIRED BEHAVIOUR
null

DESIRED BEHAVIOUR
b: [5, 7]
c: [5, 7]
2

您可能还想查看以下两个问题: