id가 같을 경우 완전한 논리적 동등으로 만들기 위해서 해시코드를 사용해야한다.
// 객체비교 : 중요.
//객체비교의 동작메커니즘.(자바에서 객체가 동일한지 아닌지를 내부적으로 아래와 동작이 된다.)
// 해시코드 값이 다르면 서로다른 객체로 판단을 하고, 해시코드 값이 같으면 equals()메소드로 다시 비교한다.
// equals()메소드가 true이면 동일한 객체로 보고, false면 다른객체로 보게된다.
// hashcode()메소드와 equals()메소드를 재정의를 안하면, 객체비교는 Object클래스의 설계 원리대로 객체비교작업이 일어나다.
// 재정의를 하면, 내가 원하는 대로 비교를 해서, 객체비교작업이 일어난다.
public class Key {
public int number;
public Key(int number) {
this.number = number;
}
// 재정의를 한 의미는 Object클래스의 객체비교 성격을 사용하지 않고, Key클래스만의 객체비교를 만들어서 사용.
@Override
public boolean equals(Object obj) {
System.out.println("Key클래스의 equals()메소드 동작");
if(obj instanceof Key) {
Key compareKey = (Key) obj;
if(this.number == compareKey.number) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
System.out.println("Key클래스의 hashCode()메소드 동작");
return number;
}
}
import java.util.HashMap;
public class KeyExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
// HashMap클래스의 특징?
// HashMap클래스가 생성된 기억장소는 [key, value] 쌍으로 설계가되어있다.
// key는 중복할수 가 없다는 성격을 가지고 있다.
// 데이타를 저장할 때마다 key 중복검사 기능을 가지고 있다.
// 중복된 키가 사용되면, 전에 정보는 소멸되고, 새로운 값이 저장된다.
//사용법.
HashMap<Key, String> hashMap = new HashMap<Key, String>();
//데이타 삽입. 객체비교작업이 발생한다.
hashMap.put(new Key(1), "홍길동"); // key: 힙영역의 주소
hashMap.put(new Key(1), "이순신"); // key: 힙영역의 주소
//기억장소에 저장된 데이타의 수
System.out.println(hashMap.size()); // Object클래스의 객체비교 2. Key클래스의 재정의된 객체비교 1
}
}
'JAVA' 카테고리의 다른 글
System 클래스 (currentTimeMillis,nano Time) (0) | 2022.10.07 |
---|---|
Object 클래스 객체복제 clone() (0) | 2022.10.07 |
Object 클래스 equals메소드 (0) | 2022.10.07 |
제네릭 메서드 예제 (태그 설명) (0) | 2022.09.29 |
제네릭 메서드 (0) | 2022.09.29 |