当前位置:  开发笔记 > 编程语言 > 正文

Java HashMap没有从key获得价值

如何解决《JavaHashMap没有从key获得价值》经验,为你挑选了1个好方法。

当我试图从具有一条记录的hashmap中获取错误时,我一直变为空.最后我用以下方式测试它:

Iterator it = pieces.keySet().iterator();
    while (it.hasNext()){
        System.out.println("object from key >> " + pieces.get(it.next()));
    }
    Iterator itt = pieces.values().iterator();
    while (itt.hasNext()){
        System.out.println("direct object >> " + itt.next().getPosition());
    }

我得到的输出是:

object from key >> null
direct object >> application.Position@37

我已经显示的代码被使用,因为它之间没有任何其他东西.

关于位置对象,我重写了hashCode()函数,以根据Position类的值返回hashCode.因此,当对象中的变量发生变化时,HashCode会发生变化.上面的代码在位置对象的值更改之前很有效.但是一旦我改变了,我就会通过密钥获得空值.



1> dimo414..:

请参阅相关文档Map:

注意:如果将可变对象用作映射键,则必须非常小心.如果在对象是地图中的键的情况下以影响等于比较的方式更改对象的值,则不指定映射的行为.

地图数据结构在插入时检查您的对象,以确定它应该存在的位置(因为HashMap它检查hashCode()并将其放入特定的存储桶中,因为TreeMap它将其与其他键进行比较并将其放在树的特定分支中,等等.).地图提供有效的查找,因为它们查看对象的预期位置,而不搜索树的其他存储桶/其余部分.如果在将对象以影响地图存储位置的方式存储在地图中之后对其进行变异,则可以打破地图所做的假设.它会看到预期的桶,找不到它,然后放弃.

HashMap在这个相关答案中详细介绍了假设的原因和原因.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有