java – HashSet contains()方法
发布时间:2020-12-14 16:39:48 所属栏目:Java 来源:网络整理
导读:我执行下面的代码,发现输出是假的. 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) {
我执行下面的代码,发现输出是假的.
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.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |