728x90
반응형
Hash 가 구현된 컬렉션들은 다음의 조건으로 수행된다.
1. 객체의 hashCode() 를 먼저 호출한 후, 리턴 값을 저장한다.
2. 이후 추가되는 객체의 hashCode()를 호출한 후 리턴값이 동일하면 해당 객체의 equals()를 호출해서 값을 비교한다.
3. 두 메서드가 모두 동일하면 같은 객체로 취급한다.
예외) String Class는 equals()와 hashCode() 모두 '문자열의 내용이 동일하면 같은 값을 리턴하도록 오버라이딩되어 있음.
class A{
class Test{
출력값 : java Test
First : hashCode
Second : hashCode
Third : hashCode
Forth : hashCode
Forth : equals
1. 객체의 hashCode() 를 먼저 호출한 후, 리턴 값을 저장한다.
2. 이후 추가되는 객체의 hashCode()를 호출한 후 리턴값이 동일하면 해당 객체의 equals()를 호출해서 값을 비교한다.
3. 두 메서드가 모두 동일하면 같은 객체로 취급한다.
예외) String Class는 equals()와 hashCode() 모두 '문자열의 내용이 동일하면 같은 값을 리턴하도록 오버라이딩되어 있음.
class A{
int m;
String name;
public A(int m, String name){
public int hashCode(){
public boolean equals(Object obj){
}String name;
public A(int m, String name){
this.m=m;
this.name=name;
}this.name=name;
public int hashCode(){
System.out.println(name + " : hashCode");
return this.m; // m 값이 동일하면 같은 값을 리턴하고 싶다는 의미?
}public boolean equals(Object obj){
System.out.println(name+" : equals");
if(obj instanceof A){
return false;
}A a=(A)obj; // A 타입으로 다운캐스팅
return this.m==a.m; //m 값이 동일하면 true를 리턴하겠다는 의미
}return this.m==a.m; //m 값이 동일하면 true를 리턴하겠다는 의미
return false;
class Test{
public static void main(String[] args){
}HashSet<A> hs=new HashSet<A>();
hs.add(new A(100,"First"));
hs.add(new A(50,"Second"));
hs.add(new A(150,"Third"));
hs.remove(new A(50,"Forth"));
}hs.add(new A(100,"First"));
hs.add(new A(50,"Second"));
hs.add(new A(150,"Third"));
hs.remove(new A(50,"Forth"));
출력값 : java Test
First : hashCode
Second : hashCode
Third : hashCode
Forth : hashCode
Forth : equals
728x90