4,563,263 th visitor since 2017.2.1 ( Today : 157 )
Programming
No. 397
Name. swindler
Subject. equals(), hashCode() overriding하는 법
Main Cate. Java
Sub Cate.
Date. 2007-10-02 17:55
Hit. 4210 (211.36.27.8)
File.
equals(), hashCode() overriding하는 법


java.util에 Set interface계열의 경우 중복을 허용하지 않는데 중복유무를 equals메서드와 hashCode메서드를 이용하여 판별한다.



그래서 Set에 사용자 정의 객체를 넣기 위해서는 equals()와 hashCode()를 overriding해야한다



그 예는



public class MyClass {

private int memberInt

private String memberString



public boolean equals(Object obj) {


if (obj == null) //일단 값이 있어야지 널이면 ^^;
return false;


if (! (obj instanceof MyClass)) // 데이터 타입이 같아야 같을 수 있지..
return false;


MyClass that = (MyClass) obj;

//데이터 타입 같으면 다운캐스팅 할수 있지, 다운 캐스팅해야 변수에 접근할 수 있지



if(this.memberString == null || that.memberStirng == null){

return false;

}// 객체가 null이면 비교의 의미가 없으니깐...


if (this.memberInt == that.memberInt && this.memberString.equals(that.memberStiring)){

return true;

}else{

return false;

} //이제 변수값을 모두 비교... 기본타입은 == 연산자로 객체타입은 equals메서드로 비교

// 기본타입과 객체타입의 차이점을 잘 봐주자 ^^
}



public int hashCode(){

return new Integer(memberInt).hashCode()^memberString.hashCode();

}

}



hashCode()를 overriding하는 방법은 다양한 방법이 있으나 hashCode간에 ^연산을 하는게 가장 쉬운 방법이다..



hashcode란 일종에 검색을 위한 index key값으로 다음 조건을 만족해야한다.

- 같은 데이터 타입(class)에 같은 값을 가지고 있으면 hashcode는 반듯이 같아야 한다.

- 같은 데이터 타입(class)에 다른 값을 가지고 있으면 hashcode는 반듯이 달라야 한다.

- 다른 데이터 타입(class)간에 같은 hashcode를 가지고 있어도 무관하다



즉, hashcode가 같고 데이타 타입이 같으면 같은 객체(equals()의 결과가 true)이나... hashcode만 같다고 같은 객체라고 말할 수는 없다


[바로가기 링크] : http://coolx.net/cboard/develop/397



Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog