Java映射值返回null

时间:2015-03-20 23:43:44

标签: java dictionary null

我有一个非常奇怪的问题。我有一个名为vectors的简单Map,我将StrategyPairs存储为keys,将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),则返回null。 这在某种程度上是非常奇怪的,因为键是相同的(至少它在打印时打印完全相同的东西......)

当我重命名策略时会出现问题,例如我更改了班级"策略"中的属性名称。然后突然包含StrategyPairs(两个策略的包装类)的地图搞砸了,正如我之前解释过的那样......

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

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

返回: 空值 (2.0; 2.0) 空值 (2.0; 1.0)

1 个答案:

答案 0 :(得分:0)

正如@Rajendra Gujja在评论中提到的那样,“将密钥保存在地图后,密钥的哈希码不应该改变”。这是真的;一旦我将所有的哈希码改为简单地使用UUID而不是名称属性更改,问题就解决了。谢谢你的所有答案!