티스토리 뷰

 

 

 hashCode() and equals() 

 

- 서로 다른 객체는 각자 다른 주소값을 가지고 있기에 각자의 hashCode를 가지게 된다. 

 

- equals()는 최상위 Object class에 속해 있어서 Java Class들이 overriding 하는 것이 가능. 

 

- primitive type은 내용이 같은지 reference 는 가리키는 주소가 같은지 비교해주는데 overriding을 통해서 이 점을 수정가능.

 

- HashSet의 equals()는 내용이 동일하면 true를 반환

 

- HashSet의 add()는 데이터의 입력이 가능(hashSet에 동일한 data가 존재하지 않는다)하면 true, 요소가 이미 존재하면 false를 반환

 

- equals() 만 overriding 할 경우 같은 내용이지만 다른 주소값으로 서로 다른 객체라고 판단 될 수 있으니 hashCode()를 같이 사용해서 같은 hashCode가 반환되게 해주어야 한다. 

 

 

 

Example code 

 

Phone Book project와 같이 이름과 전화번호가 같다면 동일한 사람으로 봐야되기에 메서드의 overriding이 필요하다.

public class PhoneInfo {
    String name;
    String phoneNum;
 
    public PhoneInfo(String name, String num){
        this.name = name;
        phoneNum = num;
    }
 
    public void showInfo(){
        System.out.println("name: " + name);
        System.out.println("phone: " + phoneNum);
    }
 
    //HashSet 사용 위한 hashCode() overriding
    public int hashCode(){
        //String hashCode를 쓰는 방식
        return name.hashCode();
    }
 
    //equals() overriding - 원래는 reference 비교지만 내용비교를 할 수 있게 overriding되어있다.
    public boolean equals(Object obj){
        PhoneInfo cmp = (PhoneInfo)obj;
        if(name.compareTo(cmp.name) == 0){ //compareTo 0 means equal
            return true//True: same name exist.
        }else{
            return false//False: There is no same data in the set
        }
    }
}
 

 

'JAVA' 카테고리의 다른 글

Check only integer input  (0) 2019.07.12
instanceof keyword  (0) 2019.07.11
Singleton pattern (Java design pattern)  (0) 2019.07.10
Scanner nextInt(), nextLine()  (0) 2019.07.10
Write to file in Java - double output using BufferedWriter  (0) 2019.07.08