자바의 정석 ch11-37,38 HashSet(2)

Luna·2023년 6월 15일
0

JAVA

목록 보기
30/32

HashSet

  • 순서를 유지하지 않고, 중복을 허용하지 않는다.
  • HashSet은 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인.
    같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
    ex) 객체를 확인하기 때문에 Integer 타입의 1과 String 타입의 1은 각각 저장이 된다.
  • boolean add(Object o)는 저장할 객체의 equals()hashCode()를 호출
    equals()hashCode()가 오버라이딩 되어 있어야 중복을 확인할 수 있다.

예제

  • Person이라는 클래스가 있다.
class Person {
	String name;
    int age;
    
    Person (String name, int age) {
    	this.name = name;
        this.age = age;
    }
    
    public String toString() {
    	return name + ":" + age;
    }
}
  • 밑의 코드처럼 오버라이딩 해 줘야 한다.
public booelan equals(Object obj) {
	if(!(obj instanceof Person)) return false;
    
    Person tmp = (Person)obj;
    
    return name.equals(tmp.name) && age == tmp.age;
|

public int hasCode() {
	return (name+age).hashCode(); // String+int = String
    // 새로운 방법
    // return Objects.hash(name,age);
}

이클립스 기능 중에 Source -> Generate hashCode() and equals()...을 선택하면 자동으로 오버라이딩을 해준다.
다만 위의 예제 코드 처럼 코드 변경이 필요하다.

0개의 댓글