Java 重写equals()与hashCode()方法
List对象的contains方法实际上也是调用的equals()方法来进行逐条对比的。
示例代码:
package com.imooc.collection; /** * 课程类 */ public class Course { private String id; private String name; public Course(){ } public Course(String id, String name) { this.id = id; this.name = name; } public void setId(String id){ this.id = id; } public void setName(String name) { this.name = name; } public String getId() { return id; } public String getName() { return name; } /** * 重写 Course类的 Equals方法 * @param obj * @return */ @Override public boolean equals(Object obj){ if(this == obj) { return true; } if(obj == null) { return false; } if(!(obj instanceof Course)){ return false; } Course course = (Course) obj; if(this.name.equals(course.name) && this.id.equals(course.id)) { return true; } return false; } }
Set对象的contains方法跟List实现方式不一样,是先调用hashCode()方法返回hash码,如果hash码一致,再调用equals()方法。
@Override public int hashCode() { return Objects.hash(name); }