본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단 ] HashMap으로 Map컬렉션을 이해하기

by 찌노오 2023. 8. 12.

 

 

파이썬을 공부할 때 자료구조는 비교적 앞에 나왔는데, 자바에서는 (물론 배열 개념은 나왔지만) 이제 등장했다.
아마도 자료구조보다는 객체프로그래밍이 더 중요한 개념이라 그런가보다.

 

간단한 용어/개념 정리는 아래 포스팅을 참고 바란다.

2023.08.06 - [스터디/혼공학습단 - 자바] - [혼공학습단] 자바의 컬렉션 프레임워크 들어가기 앞서...

 

[혼공학습단] 자바의 컬렉션 프레임워크 들어가기 앞서...

기본미션 주차 진도 기본 미션 5주차 Chapter 13 직접 정리한 키워드 공유하기 13장 컬렉션 프레임워크에 나오는 키워드를 정리해보려고 한다. 굳이 책에 있는 내용을 정리하는 것보다는 좀 더 개념

jinooh.tistory.com

2023.08.07 - [스터디/혼공학습단 - 자바] - [혼공학습단] 파이썬과 비교해보는 자바의 컬렉션 프레임워크

 

[혼공학습단] 파이썬과 비교해보는 자바의 컬렉션 프레임워크

배경 새로운 언어를 공부하면서 느끼고 있는 점인데, 프로그래밍 언어는 하나만 잘 파놓으면 다른 언어를 배우는 진입장벽이 확 낮아진다는 사실이다. 그러나, 하나를 잘 파놓기가 쉽지 않은 것

jinooh.tistory.com

 

선택미션

주차 진도 선택 미션
5주차 Chapter 13 p.573 [직접 해보는 손코딩]
코딩 과정 및 실행결과 캡처하기

 

 

p.573 [직접 해보는 손코딩] 코딩 과정 및 실행결과 캡처하기

 

손 코딩

 

 

출력 결과

 

출력 결과 해석하기

각각의 print 메서드의 결과값을 살펴보자.

 

1. 중복으로 키를 넣고 값을 출력하기

map.put("신용권", 85);
map.put("홍길동", 90);
map.put("동장군", 80);
map.put("홍길동", 95); // "홍길동" 키로 이미 값을 저장한 상태에서 새로운 값으로 덮어씀
System.out.println("총 Entry 수: " + map.size()); // 현재 저장된 Entry(키-값 쌍)의 수를 출력

System.out.println("\t홍길동 : " + map.get("홍길동")); // "홍길동" 키에 해당하는 값 출력

중복 키는 새로운 값으로 덮어쓰고 마지막에 저장된 키의 값으로 출력되는 것을 알 수 있다.

따라서 총 Entry 수는 3이고, 홍길동 : 95 값이 출력된다.

 

2. Set으로 저장 후 출력하기

Set<String> keySet = map.keySet(); // 모든 키들을 Set에 저장
Iterator<String> keyIterator = keySet.iterator(); // Iterator를 이용하여 키를 순회
while(keyIterator.hasNext()) {
    String key = keyIterator.next(); // 다음 키를 가져옴
    Integer value = map.get(key); // 해당 키에 대한 값을 가져옴
    System.out.println("\t" + key + " : " + value); // 키와 값 출력
}
System.out.println();

모든 키를 Set으로 저장하여 반복문으로 키와 값을 출력한다.

이 때 출력 순서는 입력한 순서가 아닐 수 있다. HashMap에서는 자바에서 어떻게 저장되고 관리되는 지에 따라 결정된다고 한다.(이 부분이 명쾌하게 이해가 안가는 듯)

 

참고로 keySet() 메서드는 맵의 모든 키를 가져와서 'Set' 형태로 반환한다.

 

3. 객체 삭제 후 출력하기

 // 객체 삭제
map.remove("홍길동"); // "홍길동" 키에 해당하는 Entry(키-값 쌍) 삭제
System.out.println("총 Entry 수: " + map.size()); // 현재 저장된 Entry(키-값 쌍)의 수 출력

// 객체를 하나씩 처리
Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); // 모든 Entry(키-값 쌍)들을 Set에 저장
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator(); // Iterator를 이용하여 Entry를 순회
while(entryIterator.hasNext()) {
    Map.Entry<String, Integer> entry = entryIterator.next(); // 다음 Entry(키-값 쌍)를 가져옴
    String key = entry.getKey(); // Entry의 키를 가져옴
    Integer value = entry.getValue(); // Entry의 값(값)을 가져옴
    System.out.println("\t" + key + " : " + value); // 키와 값 출력
}
System.out.println();

'홍길동' 키를 삭제하고 총 Entry수와 모든 키와 값을 출력한다.

따라서 총 Entry 수는 2이고, 신용권 : 85, 동장군: 80 값들이 출력된다.

 

마찬가지로 여기서 쓰는 entrySet은 맵의 모든 엔트리(키-값 쌍)들을 가져와 'Set' 형태로 반환한다.

 

 

4. 전체 객체 삭제

 // 객체 전체 삭제
        map.clear(); // 모든 Entry(키-값 쌍)들을 삭제
        System.out.println("총 Entry 수: " + map.size()); // 현재 저장된 Entry(키-값 쌍)의 수 출력

clear()를 통해 맵의 모든 객체를 삭제하고 총 entry 값을 출력해본다.

따라서 총 Entry 수는 0으로 기대했던 출력결과를 얻을 수 있다.

 

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

 

반응형

댓글