🔥 Vamos/Java

1106 | 자바의 정석 기초편 :: ch11-37~11-38

unikue 2022. 11. 6. 02:01

Hash Set

: 객체를 저장하기전에 기존에 같은 객체가 있는지 확인 (중복 허용 안하므로)

: 같은 객체가 있으면 저장하지 않고, 없는 경우만 저장

: boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출 - 이 메서드는 ObjectClass에서 온 것.

우리가 만든 객체를 hashSet에 저장하려면 equals()와 hashCode()가 오버라이딩 되어있어야 함

 

class Person{
String name;
int age;

person(String name, int age){
	this.name=name;
    this.age=age;
    }
public String toString(){
	return name+":"+age;}
    
----------------------- equals()오버라이딩할때 hashcode()도 오버라이딩하는게 정석. 필수는 아님.

public boolean equals(Object obj){
	if(!(obj instanceof Person)) return false; // 참조변수 형변환 전에 instnaceof필수
    
    Person tmp = (Person)obj;  // tmp.name으로 쓰기 위해 형변환. object객체엔 name,age가 없으므로
    return name.equals(tmp.name) && age==tmp.age;} // this.age==tmp.age 객체 자신과 매개변수 비교
    
public int hashCode() {
	return (name+age).hashCode();} // 문자열 String의 해시코드 메서드 호출
    // return Objects.hash(name,age); // Objects클래스를 활용해서 이렇게도 가능