当两个对象在类 A 中具有相同的 ele
值时,这两个对象是相等的。所以我重写了 toString 和 hashCode 以返回对象的 ele
(不考虑任何地方的 s
的值)。
public class A {
private int ele;
private String s;
public int getEle() {
return ele;
}
public void setEle(int ele) {
this.ele = ele;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
@Override
public int hashCode(){
return ele;
}
@Override
public String toString() {
return String.valueOf(ele);
}
}
public static void main(String[] args) {
Map<A, String> map = new HashMap<>();
A a1 = new A();
a1.setEle(10);
a1.setS("abc");
A a2 = new A();
a2.setEle(10);
a2.setS("efg");
map.put(a1, "val1");
map.put(a2, "val2");
System.out.println(map.get(a1));
System.out.println(map.get(a2));
}
输出:
val1
val2
但是如果我将 a1
和 a2
的值放在一个映射中,我期望的是 val1
或 val2
为 map.get(a1)
和 map.get(a2)
返回。
最佳答案
当然,a1
和 a2
具有相同的哈希码,但它们不被认为是相等的,因为您没有覆盖 equals
考虑两个A
具有相同 ele
的对象平等。 map 将使用 equals
在使用哈希码之后,最终的平等统治者。 map 会将两个对象放在同一个桶中,但因为它们不相等,所以它会同时保留这两个对象。
覆盖 equals
以便它返回 true
如果另一个对象是 A
他们都有相同的ele
.然后你会看到 val2
get
都将返回电话。
关于Java - 重写 hashCode 和 toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290579/