[英]Override equals
我有这个课:
public class Phone{
private String number;
//get and set of class
}
然后我有另一个使用“电话”的类
public class Antena{
private String name;
private ArrayList<Phone> phones;
}
现在,在添加元素之前,我只想添加元素,如果元素不存在于数组中。 我是Java的新手,经过一些研究,我发现我需要重写equals方法。 所以有人可以给我一些提示吗?
这就是我使用equals方法的方式:
if(!phones.equals(phone))
phones.add(phone);
注释现在具有足够的信息来实际回答问题。
第1部分
实现等于:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj.getClass() != this.getClass()) return false;
Phone t = (Phone ) obj;
return t.number.equals(this.number);
}
第2部分
实现哈希码
public int hashCode() {
return number.hashCode();
}
第三部分
使用集合而不是ArrayList来要求唯一性。
private HashSet<Phone> phones;
您重写equals方法对类对象进行相等性测试。 例如,您有两个Phone对象p1和p2。
Phone p1 = new Phone();
Phone p2 = new Phone();
p1.setNumber(10);
p2.setNumber(10);
\\Ideally these two objects are equal but when you try to do equality test , it will return false.
System.out.println(p1==p2); // outputs false because p1 and p2 are two different references
持有不同的内存地址。 还有,
System.out.println(p1.equals(p2)); // prints false when not overrided
当您覆盖equals方法时,您可以添加条件以对这两个对象进行逻辑测试。
public boolean equals(Object obj)
{
if (!(obj instanceof Phone))
return false;
return this.getNumber() == ((Phone)obj).getNumber();
}
现在,如果您在p1和p2对象上调用equals方法,它将返回true。 当您想根据实例变量而不是引用地址将两个类对象等同时,等于方法测试非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.