Java HashMap' key'对象是通过引用存储的?

时间:2018-06-13 16:47:49

标签: java reference hashmap

我使用的是Point3D'类成员作为HashMap中的Key,HashMap的值是' Voxel' - 空间中的3D虚拟立方体。

现在,由于某种原因,以下代码打印了' null'。

HashMap<Point3D,Voxel> hashMap = new HashMap<>();
Voxel v = new Voxel(new Point3D(0,0,0),200,geos);

hashMap.put(new Point3D(0,0,0),v);
Voxel test = hashMap.get(new Point3D(0,0,0));

System.out.println(v.toString());

我的猜测是映射&#39; Key&#39;通过引用存储,当我发送新的&#39;对象,虽然它的字段中具有相同的值,但它仍然不是原始的密钥,而是&#39; get&#39;方法返回null。

Point3D拥有等于&#39;等于&#39;等等的最重要方法。和Voxel对于#String&#39;有最重要的方法,我认为它可能有助于比较Key。

我是对的,因为引用的差异会发生这种情况吗? 如果我这样做,请帮助我找到一种方法来映射Point3D字段而不是参考。

非常感谢!

1 个答案:

答案 0 :(得分:1)

Java Map实际上使用hashCode()来表示密钥是否是缩进的。只需查看课程Point3D