TreeMap随机停止正确返回值

sme*_*ing 1 java treemap

我有以下TreeMap:

TreeMap<String, Integer> distances = new TreeMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)

它包含两个字符串,"Face"和"Foo",具有适当的值,这样:

System.out.println(distances); 
Run Code Online (Sandbox Code Playgroud)

产量:

{Face=12, Foo=2}
Run Code Online (Sandbox Code Playgroud)

然而,distances.get(Face)返回null,即使distances.get(Foo)正确返回2.以前,distances.get(Face)工作,但由于某种原因,它停止工作.注意我打印出图呼吁这两个键的get()之前,所以我不小心变脸的值设置为null.有没有人遇到过这个问题?有什么我能做的吗?我只是想弄清楚如何调试这个问题.

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

第二个音符:我也觉得非常有信心我的实现hashcode(),并equals()为我使用的对象.(另外,如果我的实现不正确,它不会从一开始就不起作用吗?而不是停止随机工作?)

Eta*_*oin 5

在回答您注意:如果你覆盖的每个人都在问equals()hashcode()-这是非常重要的,是正确的.但这是一个TreeMap,这意味着你也必须关心比较 - 无论你是使用Comparable对象还是外部对象Comparator,你需要确保你的比较是一致的(你的对象是否可变?)并且它们与你的equals()方法.

顺便提一下,当你在原始问题中说你正在使用String对象时,你自己也是一种伤害 - 字符串是不可变的,它们的比较方法在这里没有考虑,所以问题根本不同; 既然我们知道您自己的代码,那么可能的解决方案领域就更广泛了.