java - 方法结束后向 HashMap 添加的条目将变为 null

标签 java null hashmap

我有这门课:

    public class MyClass{

        private static Map<int[], Terrain> allTerrain = new HashMap<int[], Terrain>();

        public static void main(String[] args){
            populate();
            int[] test = {0, 0};
            System.out.println(allTerrain.get(test));
        }

        private static void populate() {
            for (int i=0; i<10; i++) {
                int[] index = {i, i};
                allTerrain.put(index, new Terrain());
            }
            int[] test = {0, 0};
            System.out.println(allTerrain.get(test));
        }

    }

在方法内部 allTerrain.get()方法返回对象的实例,但是当我使用 allTerrain.get() 时在该方法之外,它返回 null对于所有条目。 一切都在主线程上运行,因此并发不是问题(我认为)。 关于如何解决这个问题有什么想法吗?

最佳答案

它不会从范围内部和外部的 allTerrain map 中检索值。

null
null

问题是,当您在 HashMap 中使用对象作为键时,它需要以有用的方式实现 hashcodeequals方式。具有相同值的数组不被视为相等。因此它们不引用相同的 key

Boolean equal = new int[]{1, 2}.equals(new int[]{1, 2}) // is false

关于java - 方法结束后向 HashMap 添加的条目将变为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720784/

相关文章:

java - SWT Shell KeyListener

java - 如何使用另一个变量在对象中定义变量

java - Java swing 应用程序中 JMenuBar Flyout 的问题

Java DOM 解析器返回空文档

将 NA 替换为 NULL

java - 如何在不使用迭代器或集合的情况下迭代 Map?

java - 对象冒泡排序错误: NullPointerException

java - ConcurrentHashMap 在我的 Java Web 应用程序中陷入无限循环?

java - HashSet 和 HashMap 在 Java 中是如何工作的?

java - Android如何在logcat中查看长字符串