Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Pair로 관리하는 Map 본문

Java/자료구조

Pair로 관리하는 Map

Seung__ 2021. 10. 25. 23:26

1. HashMap class


  • Map인터페이스를 구현한 클래스
  • 가장 많이 사용되는 Map 인터페이스 클래스
  • key - value의 pair로 관리하는 메서드를 구현함
  • 검색을 위한 자료구조
  • key를 이용하여 값을 지정, key를 사용하여 값을 가져옴. - hash 알고지름으로 구현됨.
  • key 가 되는 객체는 중복될 수 없고, 객체의 유일성 비교를 위한 equals(), hashCode() 구현 필요.
  • HashTable을 collision이 발생할 수 있다.
    Hash함수에 의해 Key값에 대한 index가 반환되는데, 다른 key값이어도 같은index 반환 가능함..
    그래서 HashTable을 꽉채워서 쓰지는 않음.

 

 

 

2. HashMap 사용

2.1 MemberHashMap


public class MemberHashMap {

    private HashMap<Integer, Member> hashMap;

    public MemberHashMap() {
        hashMap = new HashMap<>();
    }

    public void addMember(Member member){
        hashMap.put(member.getMemberId(), member);
    }

    public void removeMember(int memberId){
        if (hashMap.containsKey(memberId)){
            hashMap.remove(memberId);
            return;
        }
        throw new NoSuchElementException("해당 memberId에 해당하는 Member가 없습니다.");
    }

    public Member getMember(int memberId){
        if (hashMap.containsKey(memberId)){
            return hashMap.get(memberId);
        }
        throw new NoSuchElementException();
    }

    public Set<Integer> getKeys(){
        return hashMap.keySet();
    }

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

        while (iterator.hasNext()){

            int key = iterator.next();
            Member member = hashMap.get(key);
            System.out.println("member = " + member);
        }

        System.out.println("=========================");
        hashMap.keySet().forEach(k -> System.out.println(hashMap.get(k)));
    }
}
  • 출력 부분은 위와같이 간단히도 가능함 ㅋㅋ

 

 

2.2 Test


public class MemberHashMapTest {

    MemberHashMap memberHashMap;

    @BeforeEach
    void beforeTest(){

        memberHashMap = new MemberHashMap();

        Member member1 = new Member(1001, "A");
        Member member2 = new Member(1002, "B");
        Member member3 = new Member(1003, "C");
        Member member4 = new Member(1004, "D");

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

    }



    @Test
    void MemberOverlapTest(){
        //given
        Member member = new Member(1001, "A");

        //when
        memberHashMap.addMember(member);

        //then
        memberHashMap.showAllMember();
        assertEquals(memberHashMap.getKeys().size(), 4);
    }


    @Test
    void addMemberTest(){
        //given
        Member member = new Member(1005, "F");

        //when
        memberHashMap.addMember(member);

        //then
        assertEquals(memberHashMap.getKeys().size(), 5);
        assertEquals(memberHashMap.getMember(member.getMemberId()), member);

        memberHashMap.showAllMember();

    }

    @Test
    void removeMemberTest(){
        //given
        int removeMemberID = 1004;

        //when
        memberHashMap.removeMember(removeMemberID);

        //then
         assertEquals(memberHashMap.getKeys().size(), 3);
         assertThrows(NoSuchElementException.class, ()-> memberHashMap.getMember(removeMemberID));

         memberHashMap.showAllMember();
    }
}
  • 출력은 두 가지 방식 모두 동일하다.

 

 

3. TreeMap 클래스


  • Map인터페이스를 구현한 클래스,key에 대한 정렬을 구현할 수 있음
  • key가 되는 클래스에 comparable, or comparator를 구현하여 key-value pair자료를 key값 기준으로 관리

 

 

4. GitHub: 211025 HashMap


 

GitHub - bsh6463/dataStructure

Contribute to bsh6463/dataStructure development by creating an account on GitHub.

github.com

 

Comments