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 而不是更改的名称 属性 ,问题就解决了。感谢您的所有回答!
我遇到了一个非常奇怪的问题。我有一个名为 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 而不是更改的名称 属性 ,问题就解决了。感谢您的所有回答!