Java 简单HashSet包含误解
对于下一个示例,我不理解为什么HashSet返回false。代码:Java 简单HashSet包含误解,java,set,hashset,Java,Set,Hashset,对于下一个示例,我不理解为什么HashSet返回false。代码: import java.util.*; public class Name { private String first, last; public Name(String first, String last){ this.first = first; this.last = last; } public boolean equals(Name n){
import java.util.*;
public class Name {
private String first, last;
public Name(String first, String last){
this.first = first;
this.last = last;
}
public boolean equals(Name n){
return n.first.equals(first) && n.last.equals(last);
}
public int hashCode(){
return 31*first.hashCode()+last.hashCode();
}
public static void main(String[] args){
Set<Name> s = new HashSet<Name>();
Name n1 = new Name("Donald", "Duck");
Name n2 = new Name("Donald", "Duck");
s.add(n1);
System.out.print("HashCodes equal: ");
System.out.println( n1.hashCode() == n2.hashCode());
System.out.print("Objects equal: ");
System.out.println( n1.equals(n2) );
System.out.print("HashSet contains n1: ");
System.out.println(s.contains(n1));
System.out.print("HashSet contains n2: ");
System.out.println(s.contains(n2));
}
}
摘录自包含方法说明:
如果此集合包含指定的元素,则返回true。更多
形式上,当且仅当该集合包含元素e时,返回true
这样o==null?e==null:o.equalse
问题:为什么即使两个对象都不为null并且它们在hesh和value方面都相等,它也会为这两个对象返回false?,因为您没有重写从Object类继承的equals方法 输出演示:
因为您没有重写从对象类继承的equals方法 输出演示:
重写对象的equals方法时出错
public boolean equals(Name n){
这只是一种方法。正确的合同是:
public boolean equals(Object o){
// .....
}
重写对象的equals方法时出错
public boolean equals(Name n){
这只是一种方法。正确的合同是:
public boolean equals(Object o){
// .....
}
是的,好的,使用n1.equalsObject n2很容易检查。谢谢是的,好的,使用n1.equalsObject n2很容易检查。谢谢
public boolean equals(Object o){
// .....
}