从哈希图中检索值时出现问题。hashmap 声明如下:
HashMap<TRpair,A> aTable = new HashMap<TRpair,A>();
然后我将 112 个值放入映射中,如下所示:
aTable.put(new TRpair(new T(<value>),new Integer(<value>)),new Ai());
其中 Ai 是扩展 A 的 4 个子类中的任何一个。
然后我继续检查地图中的值,如下所示:
int i = 0;
for (Map.Entry<TRpair,A> entry : aTable.entrySet()) {
System.out.println(entry.getKey().toString() + " " + entry.getValue().toString());
System.out.println(entry.getKey().equals(new TRpair(new T("!"),new Integer(10))));
i++;
}
正如人们所期望的那样,i 最后保留了值 112,并且正如预期的那样,相等性测试仅对一个条目打印为 true。
但是,当我这样做时
System.out.println(aTable.get(new TRpair(new T("!"), new Integer(10))));
尽管上面的代码片段确认映射中确实有一个条目恰好具有此键,但仍会输出 null 。
如果有帮助,TRpair 类声明如下:
public class TRpair {
private final T t;
private final Integer r;
protected TRpair(Integer r1, T t1) {
terminal = t1;
row = r1;
}
protected TRpair(T t1, Integer r1) {
t = t1;
r = r1;
}
@Override
public boolean equals(Object o) {
TRpair p = (TRpair)o;
return (p.t.equals(t)) && (p.r.equals(r));
}
@Override
public String toString() {
StringBuilder sbldr = new StringBuilder();
sbldr.append("(");
sbldr.append(t.toString());
sbldr.append(",");
sbldr.append(r.toString());
sbldr.append(")");
return sbldr.toString();
}
}
每个 Ai(扩展 A)和 T 类中的 equals() 和 toString() 方法都被类似地覆盖,并且看起来像预期的那样运行。
为什么hashmap aTable输出的值是null,而之前已经确认对应键的值确实在map中?
非常感谢,
弗罗斯科伊。