본문 바로가기

Programming/JAVA

컬렉션 프레임워크(3) - Set 컬렉션 2 : HashSet [2/2]

JAVA logo image

 

 

 

앞선 아티클에서 HashSet의 기본 사용방법을 알아보고, hashCode( )와 equals( ) 메서드를 살펴보았습니다. 이번에는 사용자 정의 클래스를 통해서 hashCode( )와 equals( ) 메서드를 오버라이드해 사용하는 예시까지 살펴보도록 하겠습니다.  

 

 

 

컬렉션 프레임워크(3) - Set 컬렉션 2 : HashSet [1/2]

본격적으로 Set 컬렉션의 구현 클래스를 살펴보겠습니다. 우선, HashSet을 보겠습니다. 기본적으로 HashSet 생성은 아래와 같이 기본 생성자를 호출하는 방식입니다. 타입 파라미터 E에는 컬렉션에

nozeroslope.tistory.com

 

 

 

 


 

 

 

이번에는 사용자 정의 클래스인 Member 클래스를 선언하도록 하겠습니다. 우리가 하고자 하는 것은, 이 Member 인스턴스가 다르더라도 해당 클래스의 멤버인 name과 age가 모두 동일할 경우에는 같은 인스턴스로 간주해 중복 저장되지 않도록 선언하는 것입니다. 

 

 

[Member.java]

public class Member {
	public String name;
	public int age;
	
	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	
	// name과 age의 값이 같으면 true 리턴
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member member = (Member) obj;
			return member.name.equals(name) && (member.age == age);
		} else {
			return false;
		}
	}
	
	
	// name과 age 값이 같으면, 동일한 hashCode가 리턴된다
	@Override
	public int hashCode() {
		return name.hashCode() + age;
	}
}

 

import java.util.*;

public class ExampleMain {
	public static void main(String[] args) {
		Set<Member> set = new HashSet<Member>();
		
		set.add( new Member("Swings", 30) );
		set.add( new Member("Swings", 30) );
		
		System.out.println("객체 수 : " + set.size());
	}
}


/* 출력
객체 수 : 1
*/