【发布时间】:2020-01-15 06:56:38
【问题描述】:
我有一个名为 Varfoo 的类来存储变量。我有另一个名为 Replacement 的类,它使用哈希图将 x 替换为 2。使用忘记方法,它意味着忘记用 2 替换 x。
Varfoo x = new VarFoo("x");
Replacement s = new Replacement();
s.put(new VarFoo("x"), new IntFoo(2));
x.applyReplacement(s);
s.forget(x);
忘记方法如下:
public boolean forget(VarFoo var) {
if (var == null) {
throw new NullPointerException();
} else {
if (replacementMap.containsKey(var)) {
replacementMap.remove(var);
return true;
} else {
return false;
}
}
}
这将导致 null 因为我已经删除了密钥本身,而不是我想要的。我如何将它恢复到原来的样子?
Varfoo 的等号和哈希码:
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (!(o instanceof VarFoo))
return false;
if (o == this)
return true;
return name.equals(((VarFoo) o).name);
}
@Override
public int hashCode() {
int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
【问题讨论】:
-
你能解释更多吗,不清楚吗?你在 Varfoo 类中实现了 hashcode 和 equals 吗?
-
您需要保留以前值的历史记录。
-
可能是this的副本?
-
@azro 添加了它们。
标签: java