이 포스트는 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을 다뤄볼게요!
수고하셨습니다!