HashSet – hashCode()의 오버라이딩 조건

canyi·2023년 6월 23일
0

java m1

목록 보기
34/40

HashSet – hashCode()의 오버라이딩 조건

  • 같은 객체는 hashCode()를 여러 번 호출해도 동일한 값을 반환해야 한다.
  • equals()로 비교해서 true가 반환 된 두 객체의 hashCode() 값은 동일해야 함

코드 예시

HashSet_객체

package ch11_컬렉션_프레임워크2;

import java.util.*;

public class ex13_HashSet_객체 {
	public static void main(String[] args) {
		HashSet set = new HashSet();
//		Set set = new HashSet();

		set.add("abc");
		set.add("abc");
		set.add(new Person("David",10));
		set.add(new Person("David",10));

		System.out.println(set);	// David가 두개 나옴
	}
}

class Person {
	String name;
	int age;

	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String toString() {
		return name +":"+ age;
	}
}

HashSet_객체_hashcode

package ch11_컬렉션_프레임워크2;

import java.util.*;

public class ex14_HashSet_객체_hashcode {
	public static void main(String[] args) {
		HashSet set = new HashSet();

		set.add(new String("abc"));
		set.add(new String("abc"));
		set.add(new Person2("David",10));
		set.add(new Person2("David",10));

		System.out.println(set);
	}
}

class Person2 {
	String name;
	int age;

	Person2(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public boolean equals(Object obj) {
		if(obj instanceof Person2) {
			Person2 tmp = (Person2)obj;
			return name.equals(tmp.name) && age==tmp.age;
		}

		return false;
	}

	public int hashCode() {
		return Objects.hash(name, age);
	}

	public String toString() {
		return name +":"+ age;
	}
}

profile
백엔드 개발 정리

0개의 댓글