hashCode和equals作用实际上差不多,都是用来比较两个对象是否相同。但是equals比较更加全面准确,所以比较复杂,这样效率很低,所以我们还要使用hashCode生成一个值,如果值不同则认为两个对象不同,这样可以提高效率。当hashCode与equals都判断相同时,我们认为这两个对象是重复对象。
这里通过代码来了解hashCode和equals的关系
public class Worker {
String name;
int salary;
public Worker(String name, int salary) {
super();
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "Worker [name=" + name + ", salary=" + salary + "]";
}
@Override
public int hashCode() {
System.out.println("hashCode");
return salary;
}
@Override
public boolean equals(Object obj) {
System.out.println("equals");
Worker w = (Worker) obj;
return name.equals(w.name);
}
public static void main(String[] args) {
HashSet<Worker> set = new HashSet<>();
Worker w1 = new Worker("张三", 5000);
Worker w2 = new Worker("张三", 6000);
Worker w3 = new Worker("张三", 5000);
Worker w4 = new Worker("李四", 5000);
set.add(w1);
set.add(w2);
set.add(w3);
set.add(w4);
Iterator<Worker> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果:
当hashCode判断相同时,equals判断未必相同
当equals判断相同时,hashCode判断一定相同
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务