gpt4 book ai didi

java - HashSet中是否可以输入重复的值?

转载 作者:行者123 更新时间:2023-12-01 18:25:53 25 4
gpt4 key购买 nike

我试图通过修改 HashSet 的 hashCode() 和 equals() 方法来添加重复值?

我尝试了下面的代码

public class dupSet {
static Set set= new HashSet();
@Override
public int hashCode() {
return (int) (100*Math.random());
}
@Override
public boolean equals(Object obj) {
return false;
}
public static void main(String[] args) throws ParseException {
set.add("a");
set.add("b");
set.add("a");
System.out.println(set);
}

}

根据我的理解,如果两个重复的“a”HashSet 将首先获取 hashCode() 来获取正确的存储桶,然后检查 equals() 的值,如果 equals 返回 true 那么它不会添加,但如果它返回 false 那么它会添加。因此,为了向我的 Set 添加重复值,我重写 equals() ,它总是返回 false 但仍然设置不允许重复值?

最佳答案

您的hashCode方法返回始终为零。看一下 Math.random() 的范围。

其次,您不要覆盖所添加元素的equalshashCode。您实际上添加了一个String。为了使事情正常工作,您必须实现一个类并将该类的实例添加到您的 HashSet 中。实现的类需要重写equalshashSet方法,而不是主类。

第三,正如评论中所述,你不应该做你正在做的事情。您真正想要的是一个ArrayList。通过以这种方式实现 equalshashCode 方法,基本契约就被打破了。

关于java - HashSet中是否可以输入重复的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26200747/

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