자료구조 #15 - 컬렉션 프레임워크 : Map & HashMap

HongInSung·2022년 12월 14일
0
post-thumbnail

이 포스트는 FastCampus에 이 강의를 보고 포스팅되었습니다.
문제가 될 시 삭제될 예정입니다.

Map은 뭐고..

Map은 Key-Value 구조로 되어있는 자료구조입니다.
키와 값이 하나의 쌍으로 연결되어 있어 키를 통해 값에 접근을 할 수 있습니다.
대표적인 클래스는 HashMap이 있습니다.

HashMap?

Map 인터페이스를 구현한 클래스입니다.
현재 가장 많이 사용되는 클래스이기도 하죠.
Key-Value를 쌍으로 관리하는 메서드가 존재합니다.
Key를 이용하여 값을 지정, 꺼내오기가 가능합니다.

  • 이 부분은 Hash로 구현이 되어 있습니다.

Key가 되는 객체는 중복될 수 없고, 객체가 중복되는지 확인하기 위한 equals()와 hashCode() 메서드를 구현해야 합니다.
이 놈으로 멤버십 프로그램을 리팩토링 해보겠습니다.

늘 말하는거긴 하지만.. 코드는 어디에?

코드는 제 깃허브에 올라와 있습니다.
오는 김에 팔로우랑 스타도 눌러줘잉

MemberHashMap 클래스 생성 및 생성자 구성

public class MemberHashMap {
    private HashMap<Integer, Member> hashMap; // HashMap 클래스 import

    public MemberHashMap() {
        hashMap = new HashMap<>(); // 빈 hashMap 생성
    }
}

Create, Remove 메서드 구현

public void addMember(Member member) {
    hashMap.put(member.getMemberId(), member);
} // memberId : Member 이렇게 저장할 예정

public boolean removeMember(int memberId) {
    if (hashMap.containsKey(memberId)) { // 만약 그 키에 해당하는 유저가 있다면
        hashMap.remove(memberId); // 해당 유저를 지우고
        return true; // 완료됬다는 의미에 True를 반환함.
    }
    System.out.println("그 아이디에 해당하는 사람이 없습니다."); // 만약 없다면
    return false; // false를 반환함
}

전체 멤버 출력 메서드 구현

public void showAllMember() {
    Iterator<Integer> ir = hashMap.keySet().iterator(); // iterator 생성

    while(ir.hasNext()) { // 다음 id가 없을떄까지
        int key = ir.next(); // key를 다음 요소의 id로 설정하고
        Member member = hashMap.get(key); // 그 key로 Member를 가져온다.
        System.out.println(member); // 출력
    }
}

테스트 코드 작성

public class MemberHashMapTest {
    public static void main(String[] args) {
        Member member1 = new Member();
        Member member2 = new Member();
        Member member3 = new Member();
        Member member4 = new Member();

        member1.setMemberId(1);
        member1.setMemberName("아스나");
        member2.setMemberId(2);
        member2.setMemberName("키리토");
        member3.setMemberId(3);
        member3.setMemberName("홍인성");
        member4.setMemberId(4);
        member4.setMemberName("유지오");

        MemberHashMap hashList = new MemberHashMap();

        hashList.addMember(member1);
        hashList.addMember(member2);
        hashList.addMember(member3);
        hashList.addMember(member4);

        hashList.showAllMember();
    }
}

테스트코드를 돌려보면 다음과 같이 결과가 나옵니다.

Member{memberId=1, memberName='아스나'}
Member{memberId=2, memberName='키리토'}
Member{memberId=3, memberName='홍인성'}
Member{memberId=4, memberName='유지오'}

번외

HashMap에는 저렇게 귀찮게 while문을 쓰지 않더라도 바로 print를 시킬 수 있습니다.
어떻게 하는건지 알아보겠습니다.

public void showAllMember() {
    System.out.println(hashMap);
}

이러고 다시 테스트 코드를 돌려보겠습니다.

{
  1=Member{memberId=1, memberName='아스나'}, 
  2=Member{memberId=2, memberName='키리토'}, 
  3=Member{memberId=3, memberName='홍인성'}, 
  4=Member{memberId=4, memberName='유지오'}
}

이런식으로 key와 value가 출력이 되는것을 보실 수 있습니다.

마치며

여기서 다뤄보지는 않았지만 key를 기준으로 정렬을 하는 TreeMap도 있습니다.
여기까지 컬렉션 프레임워크를 다뤄보았습니다.
사실 이 외에도 많은 클래스가 있지만 다 외울 필요는 없고 이런 대표적인 것들만 외우셔도 충분하실 것 같습니다.

그럼 20000!

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!

0개의 댓글