본문 바로가기
언어/JAVA

Set 인터페이스

by step 1 2021. 5. 2.
반응형

중복되지 않게 자료를 관리하는 Set 인터페이스를 구현한 클래스와 그 활용

 

HashSet 클래스

  • Set 인터페이스를 구현한 클래스와 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
  • 동일성 구현을 위해 필요에 따라 equals()와 hashCode()메서드를 재정의 함
package ch48;

public class Member {

	private int memberId;        //회원 아이디
	private String memberName;   //회원 이름

	public Member(int memberId, String memberName){ //생성자
		this.memberId = memberId;
		this.memberName = memberName;
	}
	
	public int getMemberId() {  //
		return memberId;
	}
	public void setMemberId(int memberId) {
		this.memberId = memberId;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	@Override
	public int hashCode() {
		return memberId;
	}

	@Override
	public boolean equals(Object obj) {
		if( obj instanceof Member){				// Member 클래스 인지 확인
			Member member = (Member)obj;		// Member 클래스로 다운 캐스팅
			if( this.memberId == member.memberId ) {  // 기존 memberId 와 같은 값이 있는지 확인
				return true;
			} else {
				return false;
			}
				
		}
		return false;
	}
	
	@Override
	public String toString(){   //toString 메소드 오버로딩
		return memberName + " 회원님의 아이디는 " + memberId + "입니다";
	}
	
	
}
package ch48;

import java.util.HashSet;
import java.util.Iterator;

public class MemberHashSet {

	private HashSet<Member> hashSet;
	
	public MemberHashSet() {
		hashSet = new HashSet<>();
	}

	public MemberHashSet(int size) {
		hashSet = new HashSet<>(size);
	}
	
	public void addMember(Member member) {
		hashSet.add(member);
	}
	
	public boolean removeMember(int memberId) {
		/*
		for (int i = 0; i < arrayList.size(); i++) {
			Member member = arrayList.get(i);
			
			//int tempId = member.getMemberId();
			
			if (member.getMemberId() == memberId) {
				arrayList.remove(i);
				return true;
			}
		}*/
		
		Iterator<Member> ir = hashSet.iterator();
		
		while(ir.hasNext()) {
			Member member = ir.next();
			
			if (member.getMemberId() == memberId) {
				hashSet.remove(member);
				return true;
			}
		}
		System.out.println(memberId + "가 존재하지 않습니다");
		return false;
	}
	
	public void showAllMember() {
		
		for (Member member : hashSet) {
			System.out.println(member);
		}
		System.out.println();
	}
}
package ch48;

public class MemberHashSetTest {

	public static void main(String[] args) {
		
		MemberHashSet memberHashSet = new MemberHashSet();
		
		Member memberLee = new Member(1001, "이순신");
		Member memberKim = new Member(1002, "김유신");
		Member memberKang = new Member(1003, "강감찬");
		
		
		memberHashSet.addMember(memberLee);
		memberHashSet.addMember(memberKim);
		memberHashSet.addMember(memberKang);
		
		
		Member memberHong = new Member(1003, "홍길동");	// 동일한 memberId값은 저장되지 않도록 equlse(), hashcode() 함수 재정의
		memberHashSet.addMember(memberHong);
	
		memberHashSet.showAllMember();
		
		memberHashSet.removeMember(memberKang.getMemberId());
		memberHashSet.showAllMember();
		
	}
}

 

반응형

'언어 > JAVA' 카테고리의 다른 글

Map 인터페이스  (0) 2021.05.02
Comparable, Comparator 인터페이스  (0) 2021.05.02
Iterator  (0) 2021.05.02
List 인터페이스  (0) 2021.05.02
자바에서 제공되는 자료구조 구현 클래스들 - 컬렉션 프레임워크  (0) 2021.05.02