gpt4 book ai didi

java - Set 集合的 contains 方法如何工作

转载 作者:行者123 更新时间:2023-12-02 10:47:30 25 4
gpt4 key购买 nike

嗨,我是java新手,因为我知道集合集合不会重复,并且当集合中已经存在元素时,它的包含方法应该返回true。我正在尝试运行下面的程序,但得到了意想不到的结果。

public class UserDefinedName {
private final String first, last;

public UserDefinedName(String first, String last) {
this.first = first;
this.last = last;
}

public boolean equals(Object o) {
if (!(o instanceof UserDefinedName))
return false;
UserDefinedName n = (UserDefinedName) o;
return n.first.equals(first) && n.last.equals(last);
}

public static void main(String[] args) {
Set<UserDefinedName> s = new HashSet<UserDefinedName>();
s.add(new UserDefinedName("Carballo", "Videl"));
System.out.println(s.contains(new UserDefinedName("Carballo", "Videl")));
}
}

我期待输出true,但程序打印false。我做错了什么?

最佳答案

表单java doc

If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

如果没有重写 hashCode() 方法,则使用对象的 hashCode() 方法,这是默认实现。

在您的情况下,您覆盖了 equals 方法,但您使用了 hashCode() 的默认实现,因为您没有覆盖 UserDefinedName 类中的 hashCode() 方法。

The UserDefinedName class overrides the equals method, and the hashCode contract demands that equal objects have equal hash codes. To fulfill this contract, you must override hashCode whenever you override equals

添加以下代码即可运行。

public int hashCode() {
return 37 * first.hashCode() + last.hashCode();
}

关于java - Set 集合的 contains 方法如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17104313/

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