gpt4 book ai didi

java - 为什么对象不相同添加到具有相同值的hashset,甚至hashCode和equals被覆盖

转载 作者:行者123 更新时间:2023-11-29 07:40:16 24 4
gpt4 key购买 nike

这是生成大小为 3 而不是 2 的哈希集的代码

package dump.test;
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s) { this.s = s; }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(ws1); hs.add(ws2); hs.add(s1); hs.add(s2);
System.out.println(hs.size()+hs.toString());
}
public boolean equals(Object aSong) {
String s = aSong.toString();
System.out.println(s);
return s.equals(this.s);
}
public int hashCode() {
System.out.println(this.s + "-" + this.s.hashCode());
return this.s.hashCode();
}
/*public int compareTo(Object aSong) {
String s = aSong.toString();
return this.s.compareTo(s);
}*/
}

如果 equals 和 hashCode 被覆盖,它总是在输出下方打印 enter image description here

您可以看到两个对象在输出中具有相同的代码但算作不同并且生成的计数为 3

这是如果我们不覆盖 equals 和 hashCode enter image description here

请帮助我这是如何工作的。

最佳答案

问题是你的情况不对称。如果实现决定以您的类作为参数在 String 实例上调用 equals,它肯定会返回 false,因此您的代码将不会始终有效。

关于java - 为什么对象不相同添加到具有相同值的hashset,甚至hashCode和equals被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30978749/

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