gpt4 book ai didi

java - 哈希表返回 null 但对象键存在

转载 作者:行者123 更新时间:2023-12-01 07:04:21 25 4
gpt4 key购买 nike

编辑:FML!我的哈希码实现有一个小写的 c。 -.-

我一直在努力学习 TDD,并且一直在关注 Kent Beck 的《By Examples》一书;非常好!

但是,我看不到进展,因为当我访问哈希表时,值返回 null。我已经运行了一个调试 session ,并且具有该值的对象显然在那里,但结果为空。

构建和访问的代码是:

public void addRate(String from, String to, int rate){
this.rates.put(new Pair(from, to), new Integer(rate));
}

起止点分别为“GBP”和“USD”。也通过调试验证。

调用上述内容的测试用例:

@Test
public void testreduceMoneyDifferentCurrency(){
Bank bank = new Bank();
bank.addRate("GBP", "USD", 2);
Money result = bank.reduce(Money.gbpound(2), "USD");
assertEquals(Money.dollar(1), result);
}

银行中的reduce方法调用方法rate:

public Money reduce(Bank bank, String to){
int rate = bank.rate(this.currency, to);
return new Money(this.amount / rate, to);
}

问题出在哪里:

    public int rate(String from, String to){
if (from.equals(to)) return 1;
Integer rate = (Integer) this.rates.get(new Pair(from, to));
return rate.intValue();
}

第一行处理美元 -> 美元转换等。

Pair 对象是 2 个字符串,用作键。

我没有大量使用过表,但我看不出问题是什么,我确信这些值在哈希表中,但“rate”总是返回空值。

只见树木不见森林。 :) 有人能给我指出正确的方向吗?

最佳答案

我认为问题出在 Pair 方法中。当你这样做时:

this.rates.get(new Pair(from, to));

您正在创建一个新的 Pair 实例,该实例与您在 addRate 方法中放入 map 中的实例不同。

如果您希望代码正常工作,则必须使用 Pair 类的相同实例或正确实现 equalshashCode Pair 类上的方法。

以下是对 HashMap 内部工作原理以及需要执行哪些操作才能使其工作的更深入的了解:https://stackoverflow.com/a/6493946/2266098

关于java - 哈希表返回 null 但对象键存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com