我使用的是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字段而不是参考。
非常感谢!
答案 0 :(得分:1)
Java Map
实际上使用hashCode()
来表示密钥是否是缩进的。只需查看课程Point3D