首页 > 解决方案 > Java 在 for 循环内的 hashmap 中放入一些东西

问题描述

嘿,我只想说我是一个 java 新手。所以我的问题是输出是:a - null 我不知道为什么我将HashMap从更改为HashMap<Integer[], Integer> testHashMap = new HashMap<>();然后HashMap<Integer, Integer> testHashMap = new HashMap<>(); 我工作了

        HashMap<Integer[], Integer> testHashMap = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                Integer[] someInteger = {i, j};
                testHashMap.put(someInteger, (i + j * 4));
            }
        }
        Integer[] someOtherInteger = {0,0};
        System.out.println("a - " + testHashMap.get(someOtherInteger));

输出:“a - null”输出应该是:“a - 0”

如果这是一个愚蠢的问题,我很抱歉。

标签: javafor-loophashmap

解决方案


Java 数组不提供对 equals 方法的覆盖,只会进行身份比较。

为此

new Integer[]{0,0}.equals(new Integer[]{0,0});

将返回 false 并且 Integer[] 根本不是一个可用作映射键的可用类,因为 HashMap 在内部为键使用 equals 和 hashcode 方法。

您应该考虑为包含这 2 个 int 值的键创建自己的自定义类,并在其中覆盖等于和哈希码。

但是您可以使用 List 并且它应该可以工作:

HashMap<List<Integer>, Integer> testHashMap = new HashMap<>();
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        List<Integer> someInteger = Arrays.asList(i, j);
        testHashMap.put(someInteger, (i + j * 4));
    }
}
List<Integer> someOtherInteger = Arrays.asList(0,0);
System.out.println("a - " + testHashMap.get(someOtherInteger));

会给你你想要的输出。


推荐阅读