【问题标题】:Java HashMap returning null when object and value are present [duplicate]当对象和值存在时,Java HashMap 返回 null [重复]
【发布时间】:2014-11-30 04:44:39
【问题描述】:

我正在尝试从 Java 游戏的 HashMap 中获取 Point2D.Double。

 public void Undo(){
    if(Moves.size() >=1)
    {
        GW.ClearBoard();
        Ships.clear();
        Move m =Moves.remove(0);
        HashMap<Ship,Point2D.Double> shipMoves = m.getShips();
        for(Ship s: shipMoves.keySet()){
            if(shipMoves.get(s)!= null){
                Point2D.Double pos = shipMoves.get(s);
                String type = s.getType();
                GW.setShipLocation(pos, type);
                s.setPosition(pos.x, pos.y);
                Ships.add(s);
            }
        }
        System.out.println("Undo");
    }
}

从我在 Eclipse 中调试的屏幕截图中可以看到,哈希映射包含 key=MasterShip(id=87) 的条目,其值包含 Point2D.Double,输入 S 是 id=87 的船但是程序仍然返回 null,我不知道为什么或者我能做些什么。我也通过调试器检查了 Move 类中的值。

更正,会有图片,但显然我还不能发布图片。

编辑

您还可以遍历地图的 entrySet()。 ——尼克·赫里斯托夫

谢谢,解决这个问题的 entryset() 方法效果很好,但不知道如何投票或设置评论作为答案。

【问题讨论】:

  • 首先,使用 Java 命名约定(类型以大写开头,方法和变量不是)。一目了然很难判断您的某些代码是否使用了静态变量。
  • 您的Ship 类是否覆盖.equals()?您可能有不同的对象引用,因此不会从 HashMap 获取对象。
  • 不,它不会覆盖 .equals
  • 你能显示 Ship 的来源吗?
  • 也可以遍历map的entrySet()。

标签: java hashmap


【解决方案1】:

遍历MapEntrySet

   for(Map.Entry<Ship,Point2D.Double> e : shipMoves.entrySet(){
        if(shipMoves.get(s)!= null){
            Point2D.Double pos = e.getValue();
            String type = s.getType();
            GW.setShipLocation(pos, type);
            s.setPosition(pos.x, pos.y);
            Ships.add(s);
        }
    }

【讨论】:

    【解决方案2】:

    如果你使用HashMap和一个对象作为key,你需要实现两个方法:

    1. boolean equals(Object other)
    2. int hashCode()

    看看这个问题:Creating a hashCode() Method - Java

    【讨论】:

    • 在不定义这些方法的情况下它仍然可以工作 - 同一个对象本身将是 equal() 并具有一致的哈希码。无法匹配“相等”的键对象(具有相同字段值的对象)。
    • 我从 hashmap 中获取键集,所以它必须完全等于键,不是吗?我真的不明白我必须做什么才能让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2014-10-29
    • 2018-03-25
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多