gpt4 book ai didi

java - TreeMap 随机停止正确返回值

转载 作者:行者123 更新时间:2023-11-29 08:18:11 24 4
gpt4 key购买 nike

我有以下 TreeMap:

TreeMap<String, Integer> distances = new TreeMap<String, Integer>();

它包含两个字符串,“Face”和“Foo”,具有适当的值,例如:

System.out.println(distances); 

产量:

{Face=12, Foo=2}

然而,distances.get(Face)返回 null , 即使 distances.get(Foo)正确返回 2。以前,distances.get(Face)工作,但由于某种原因,它停止工作。请注意,我在为两个键调用 get() 之前打印出 map right,因此我没有不小心将 Face 的值更改为 null。还有其他人遇到过这个问题吗?有什么我可以做的吗?我只是想弄清楚如何调试这个问题,这让我度过了一段糟糕的时光。

注意:在实际代码中我实际上并没有使用字符串,而是一个不同的对象,所以它是:TreeMap<Object, Integer> .所以这不仅仅是变量名与文字字符串的混淆。

第二个注意事项:我对 hashcode() 的实现也很有信心和 equals()对于我正在使用的对象。 (另外,如果我的实现不正确,它不是从一开始就不起作用吗?而不是停下来随机工作?)

最佳答案

针对您的评论:每个人都在问您是否正确覆盖了 equals()hashcode() —— 这很重要,是的。但这是一个 TreeMap,这意味着您还必须关心比较——无论您使用的是 Comparable 对象还是外部 Comparator,您需要确保您的比较是一致的(您的对象是可变的吗?)并且它们与您的 equals() 方法一致。

顺便说一句,当您在最初的问题中说您正在使用 String 对象时,您对自己造成了伤害——字符串是不可变的,并且这里没有考虑它们的比较方法,所以问题根本不同;现在我们知道涉及您自己的代码,可能的解决方案范围更广。

关于java - TreeMap 随机停止正确返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680026/

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