Java 地图值 returns 空

Java map value returns null

我遇到了一个非常奇怪的问题。我有一个名为 vectors 的简单 Map,我将 StrategyPairs 存储为键,将 Vectors 存储为值。当我打印它时,我得到了这个结果:

{net.softwarepage.facharbeit.normalgame.logic.StrategyPair@131e56d7=(1.0;2.0), net.softwarepage.facharbeit.normalgame.logic.StrategyPair@1e1bc985=(2.0;2.0), net.softwarepage.facharbeit.normalgame.logic.StrategyPair@d5415975=(0.0;2.0), net.softwarepage.facharbeit.normalgame.logic.StrategyPair@5bf8c6e7=(2.0;1.0)}

如您所见,StrategyPair@131e56d7 映射到 Vector (1,2)。 现在我创建一个新的 StrategyPair。当我打印它时,我得到 StrategyPair@131e56d7 (和以前一样)。 但是,如果我现在调用 vectors.get(strategyPair) 它 returns null。 这在某种程度上真的很奇怪,因为密钥是相同的(至少当我打印它时它打印出完全相同的东西......)

当我重命名策略时出现问题,例如我在 class "Strategy" 中更改了 属性 名称。然后突然间,包含 StrategyPairs(两个策略的包装 class)的地图被弄乱了,正如我之前解释的那样...

编辑: 当我打印 HashMap 时,我仍然得到与上面相同的结果,但是下面的代码:

for(StrategyPair pair : vectors.keySet()) {
            System.out.println(vectors.get(pair));
}

returns: 无效的 (2.0;2.0) 无效的 (2.0;1.0)

正如@Rajendra Gujja 在评论中提到的,"hashcode of your keys should not change after you keep them in the map"。这是千真万确的;一旦我将所有哈希码更改为简单地使用 UUID 而不是更改的名称 属性 ,问题就解决了。感谢您的所有回答!