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 |
|
|
|
[Modify] [Delete] | [Reply] [List] |