java – HashSet contains()方法

前端之家收集整理的这篇文章主要介绍了java – HashSet contains()方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我执行下面的代码,发现输出是假的.
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")));
    }
}

我想知道它的行为以及为什么输出错误的.

解决方法

您还需要覆盖hashCode()方法以及equals().这两个方法都用于HashSet的正常功能,因此如果要将该类作为键,则必须在用户定义的类中重写,否则将使用Object类的hashCode(),并且不能将两个不同的对象视为与hashCode()一样,它们总是不同的,并且在contains()的情况下肯定会返回falsealways.
原文链接:https://www.f2er.com/java/124652.html

猜你在找的Java相关文章