equals()와 hashCode() 오버라이딩 예제
public boolean equals(Object obj){
if(!(obj instanceof Person)) return false;
Person tmp = (Person)obj;
return name.equals(tmp.name) && age == tmp.age;
}
public int hashCode(){
return Objects.hash(name, age);
}
예제 3
class Ex11_11 {
public static void main(String[] args){
HashSet set = new HashSet();
set.add("abc");
set.add("abc"); // 중복이라 저장안 됨.
set.add(new Person("David", 10));
set.add(new Person("David", 10));
System.out.println(set);
}
}
// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작.
// eclipse : source menu -> Generate hashCode() and equals()...
class Person{
String name;
int age;
@Override
public int hashCode() {
// int hash(Object... values); 가변인자
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
// obj 객체에는 name 멤버가 없으므로 형변환 해야 함.
if(!(obj instanceof Person)) return false;
Person p = (Person)obj;
// 나 자신(this)의 이름과 나이를 p와 비교
return this.name.equals(p.name) && this.age == p.age;
}
Person(String name, int age){
this.name = name;
this.age = age;
}
public String toString() {
return name +":"+ age;
}
}