
이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.
Set은 중복되지 않게 값을 관리하는 인터페이스 입니다.
대표적으로는 db를 짤때 쓰는 Unique 기능이라고 생각하시면 됩니다.
대표적인 클래스로는 HashSet이 있습니다.
앞에서 말했다싶이, Set 인터페이스를 구현한 클래스중 하나입니다.
equals()와 hashCode()를 체크합니다.import java.util.HashSet;
public class hashSetTest {
public static void main(String[] args) {
HashSet<String> hashSet = new HashSet<>();
hashSet.add(new String("안녕월드"));
hashSet.add(new String("안녕월드"));
hashSet.add(new String("이건 중복 테스트야"));
hashSet.add(new String("이건 중복 테스트야"));
hashSet.add(new String("잘가"));
hashSet.add(new String("잘가"));
System.out.println(hashSet);
}
}
결과 : [잘가, 안녕월드, 이건 중복 테스트야]

코드는 여기에도 나와있습니다.
아까 만든 멤버십 프로그램에서 id의 중복을 제거할때 사용이 가능합니다.
한번 해볼까요?
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return memberId == member.memberId;
}
@Override
public int hashCode() {
return Objects.hash(memberId);
}
멤버 클래스에 equals()와 hashCode()를 추가해줍니다.
단, memberId만 검사하게 하고, memberName은 무시해줍시다.
import java.util.HashSet;
import java.util.Iterator;
public class MemberHashSet {
private HashSet<Member> memberHashSet;
public MemberHashSet() {
memberHashSet = new HashSet<>();
}
public MemberHashSet(int size) {
memberHashSet = new HashSet<>(size);
}
public void addMember(Member member) {
memberHashSet.add(member);
}
public boolean removeMember(int memberId) {
// Iterator 선언
Iterator<Member> ir = memberHashSet.iterator();
// ir.hasNext()가 false가 될 때까지 돈다.
while(ir.hasNext()) {
Member member = ir.next(); // 다음 요소를 member에 저장시키고
if (member.getMemberId() == memberId) { // memberId가 맞는지 확인
memberHashSet.remove(member); // 삭제하고
return true; // true 반환
}
}
System.out.println("해당 멤버id를 가지고 있는 유저가 없습니다.");
return false;
}
public void showAllMember() {
for (Member member : memberHashSet) {
System.out.println(member);
}
}
}
ArrayList만 HashSet으로 바꿔주시면 리팩토링이 끝납니다.
한번 테스트 코드를 작성해보죠.
public class MemberHashSetTest {
public static void main(String[] args) {
Member member1 = new Member();
Member member2 = new Member();
member1.setMemberId(1);
member1.setMemberName("멤버이름");
member2.setMemberId(1);
member2.setMemberName("멤버요 ㅋ");
MemberHashSet hashList = new MemberHashSet();
hashList.addMember(member1);
hashList.addMember(member2);
System.out.println();
hashList.showAllMember();
}
}
결과 : Member{memberId=1, memberName='멤버이름'}

어때요? 중복이 사라졌죠?
해당 코드는 여기에도 나와있답니다!
ArrayList와 따로 구분해두었으니 확인해보세요!
자, 이렇게 HashSet은 끝났습니다.
다음시간엔 중복도 제거하고, 정렬도 가능한 TreeSet을 다뤄볼게요!
수고하셨습니다!