gpt4 book ai didi

Java - 重写 hashCode 和 toString

转载 作者:行者123 更新时间:2023-11-29 10:10:44 25 4
gpt4 key购买 nike

当两个对象在类 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

但是如果我将 a1a2 的值放在一个映射中,我期望的是 val1val2map.get(a1)map.get(a2) 返回。

最佳答案

当然,a1a2具有相同的哈希码,但它们不被认为是相等的,因为您没有覆盖 equals考虑两个A具有相同 ele 的对象平等。 map 将使用 equals在使用哈希码之后,最终的平等统治者。 map 会将两个对象放在同一个桶中,但因为它们不相等,所以它会同时保留这两个对象。

覆盖 equals以便它返回 true如果另一个对象是 A他们都有相同的ele .然后你会看到 val2 get 都将返回电话。

关于Java - 重写 hashCode 和 toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com