HashSet包含()方法

Bab*_*ani 6 java collections contains set hashset

我执行下面的代码,发现输出是false.

import java.util.Set;
import java.util.HashSet;

public class Name {
    private String first, last;

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

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

    public static void main(String[] args) {
        Set<Name> s = new HashSet<Name>();
        s.add(new Name("Donald", "Duck"));
        System.out.println(s.contains(new Name("Donald", "Duck")));
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道它的行为和输出的原因false.

Ank*_*gam 5

您还需要覆盖hashCode()方法equals().这两种方法都用于正确的功能HashSet,所以必须在用户定义的类中重写,如果你把它class作为一个key,其他hashCode()Object类被使用,没有两个不同objects可以被认为是相同的,因为它们hashCode()总是不同的,并且肯定false会在以下情况下返回contains().