hashCode(), equals(), 레퍼런스 동치(reference equality), 객체 동치(object equality)
Steps For Programmer/Java 2010. 5. 27. 00:18@ 해시코드 : 힙에 있는 객체의 메모리 주소를 바탕으로 고유한 ID(해싱 알고리즘에 의해생성)
@ hashCode() : 힙에 있는 각 객체마다 서로 다른 값을 가지는 유일한 정수를 리턴, hashCode() 를 오버라이드 하지 않으면 그 유형의 두 객체가 서로 같은 것으로 간주되지 않는다.
@ equals() == 연산자를 사용하여 객체를 비교한다. 즉, 두 레퍼런스가 힙에 있는 한 객체를 참조하는 지 확인
@ a.equals(b)가 true이면 a.hashCode()==b.hashCode()도 성립한다. 반대는 성립하지 않는다. 해쉬코드가 같더라도 반드시 같은 객체는 아니라는 얘기(객체가 같지 않은데도 해시코드는 같을 수도 있다)
@ 레퍼런스 동치(reference equality) : 힙에 있는 한 객체를 서로 다른 레퍼런스로 참조하는 경우, 즉 두개의 오브젝트가 완전히 같은 동일한 오브젝트이다. ==연산자로 비교할 수 있다. 동일성(identity)
@ 객체 동치(object equality) : 힙에 객체가 두개 들어있고, 두 레퍼런스가 각 객체를 참조하지만 그 두 객체가 동치인 것으로 간주할 수 있는 경우(hashCode(), equals() 메소드를 오버라이드해야한다), 동등성(equivalent)
@ HashSet에서는 해쉬코드가 다르면 같은 객체로 간주하지 않는다. HashSet은 객체의 해쉬코드 값을 사용하여 어디에 집어넣을지 결정한다.
@ TreeSet은 중복을 방지해주고 정렬을 유지해준다. 대신
1) 집합에 들어가는 원소가 반드시 Comparable을 구현해야 한다.
2) Comparator를 인자로 받아들이는 TreeSet의 생성자를 사용해야한다
위 조건 중 하나를 만족시켜야한다.
@ hashCode() : 힙에 있는 각 객체마다 서로 다른 값을 가지는 유일한 정수를 리턴, hashCode() 를 오버라이드 하지 않으면 그 유형의 두 객체가 서로 같은 것으로 간주되지 않는다.
@ equals() == 연산자를 사용하여 객체를 비교한다. 즉, 두 레퍼런스가 힙에 있는 한 객체를 참조하는 지 확인
@ a.equals(b)가 true이면 a.hashCode()==b.hashCode()도 성립한다. 반대는 성립하지 않는다. 해쉬코드가 같더라도 반드시 같은 객체는 아니라는 얘기(객체가 같지 않은데도 해시코드는 같을 수도 있다)
@ 레퍼런스 동치(reference equality) : 힙에 있는 한 객체를 서로 다른 레퍼런스로 참조하는 경우, 즉 두개의 오브젝트가 완전히 같은 동일한 오브젝트이다. ==연산자로 비교할 수 있다. 동일성(identity)
@ 객체 동치(object equality) : 힙에 객체가 두개 들어있고, 두 레퍼런스가 각 객체를 참조하지만 그 두 객체가 동치인 것으로 간주할 수 있는 경우(hashCode(), equals() 메소드를 오버라이드해야한다), 동등성(equivalent)
@ HashSet에서는 해쉬코드가 다르면 같은 객체로 간주하지 않는다. HashSet은 객체의 해쉬코드 값을 사용하여 어디에 집어넣을지 결정한다.
@ TreeSet은 중복을 방지해주고 정렬을 유지해준다. 대신
1) 집합에 들어가는 원소가 반드시 Comparable을 구현해야 한다.
2) Comparator를 인자로 받아들이는 TreeSet의 생성자를 사용해야한다
위 조건 중 하나를 만족시켜야한다.