从哈希映射中检索值时遇到问题。散列表的声明如下:
HashMap aTable = new HashMap();然后我将112个值放入地图中,如下所示:
aTable.put(new TRpair(new T(),new Integer()),new Ai());其中Ai是扩展A的4个子类中的任何一个。
然后我继续检查地图中的值,如下所示:
int i = 0;
for (Map.Entry 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++;
}正如我们所期望的那样,我在最后保留了值112,并且相等测试正好为一个条目打印真实值。
但是,当我这样做
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,之前已经确认相应键的值确实在映射中?
非常感谢,
Froskoy。