반응형
중복되지 않게 자료를 관리하는 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 |