ToBe끝판왕

[ JAVA ] 컬렉션 프레임워크 (3) - Map 본문

■ 프로그래밍 SKILLS/JAVA

[ JAVA ] 컬렉션 프레임워크 (3) - Map

업그레이드중 2024. 10. 24. 22:44
반응형





 


 

 

컬렉션프레임워크 - HashMap

 

 

• Map의 특징

-  키( key ) 와 값( value ) 의 쌍으로 이루어진 자료구조이다.

-  키( Key )는 Map 내에서 유일해야 한다.

-  값( Value ) 는 중복을 허용한다.

-  Map은 순서를 유지하지 않는다. 

 

 

 

 

 

• Map의 주요 메서드

메서드 설명
put( K key, V value ) 지정된 Key  값과 Value 값을 Map 에 저장
get( Object key ) 지정된 Key  값에 해당하는 Value  값을 반환
remove( Object Key ) 지정된 Key  와 연결된 Value  를 Map에서 제거
clear() Map에서 모든 Key 와 Value  를 제거
containsKey( Object Key ) Map 에 지정된 Key를 포함하고 있는지 여부 반환
containsValue( Object Value ) Map 이 하나 이상의 Key 에 지정된 Value를 연결하고 있는지 반환
keySet() Map 의 Key들을 Set 형태로 반환
values() Map 의 Value들을 Collection 형태로 반환
entrySet() Map 의 Key - Value 쌍을 Set<Map.Entry<K,V>> 형태로 반환
size() Map 에 있는 Key - Value 쌍의 개수를 반환
isEmpty() Map 이 비어있는지 여부를 반환

 

 

 

• Map의 사용 예시

 

package hello.blog.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapEx01 {

    public static void main(String[] args) {

        Map<String, Integer> studentMap = new HashMap<>();

        // Map 에 데이터 추가 -> put 메서드
        studentMap.put("studentA", 90);
        studentMap.put("studentB", 80);
        studentMap.put("studentC", 80);
        studentMap.put("studentD", 100);

        System.out.println(studentMap);

        // 특정 학생의 값 조회 -> get 메서드
        System.out.println("== get() 메서드 활용 ==");
        Integer result = studentMap.get("studentD");
        System.out.println("result = " + result);

        // keySet 활용
        System.out.println("== keySet() 메서드 활용 ==");
        Set<String> keySet = studentMap.keySet();
        for (String key : keySet) {
            Integer value = studentMap.get(key);
            System.out.println("key = " + key + "value = " + value);
            
        }

        // entrySet 활용
        System.out.println("== entrySet() 메서드 활용 ==");
        Set<Map.Entry<String, Integer>> entries = studentMap.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("Key = " + key + ", value = " + value);
        }

        // values 활용
        System.out.println("== value() 메서드 활용 ==");
        Collection<Integer> values = studentMap.values();
        for (Integer value : values) {
            System.out.println("value = " + value);
        }
    }
}

 

// 실행 결과

{studentB=80, studentA=90, studentD=100, studentC=80}

== get() 메서드 활용 ==
result = 100

== keySet() 메서드 활용 ==
key = studentBvalue = 80
key = studentAvalue = 90
key = studentDvalue = 100
key = studentCvalue = 80

== entrySet() 메서드 활용 ==
Key = studentB, value = 80
Key = studentA, value = 90
Key = studentD, value = 100
Key = studentC, value = 80

== value() 메서드 활용 ==
value = 80
value = 90
value = 100
value = 80

 

-  Map은 Key의 중복을 허용하지 않기 때문에, 모든 키 목록을 조회하는 keySet()을 호출하면 중복을 허용하지 않는

   Set 자료구조를 반환한다.

-  Entry는 Map 내부에서 Key와 Value를 하나로 묶어 저장할 때 사용한다.

-  values() 를 사용하면 Map은 Value 의 중복을 허용하기 때문에, Set으로 반환할 수 없고, 순서를 보장하지도 않기 때문에     List로 반환할 수도 없다. 따라서 상위 인터페이스인 Collection으로 반환한다.

 

 

▶  Map 의 Key는 중복을 허용하지 않고 순서를 보장하지 않는다 = Set과 같은 구조이다.

▶  Map 은 모든것이 Key 중심으로 동작한다.

 

• HashMap / LinkedHashMap / TreppMap 대하여 알아보기

 

package hello.blog.map;

import java.util.*;

public class MapMainEx1 {

    public static void main(String[] args) {

        run(new HashMap<>());
        run(new LinkedHashMap<>());
        run(new TreeMap<>());
    }

    private static void run(Map<String, Integer> map) {
        System.out.println("map = " + map.getClass());
        map.put("C", 10);
        map.put("B", 20);
        map.put("A", 30);
        map.put("1", 40);
        map.put("2", 50);

        Set<String> keySet = map.keySet();
        Iterator<String> iterator = keySet.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.print(key + "=" + map.get(key) + " ");
        }
        System.out.println();
    }
}

 

// 결과 

map = class java.util.HashMap
A=30 1=40 B=20 2=50 C=10 
map = class java.util.LinkedHashMap
C=10 B=20 A=30 1=40 2=50 
map = class java.util.TreeMap
1=40 2=50 A=30 B=20 C=10

 

 

-  HashMap  :  입력한 순서를 보장하지 않는다.

-  LinkedHashMap  :  Key를 기준으로 입력한 순서 보장

-  TreeMap  :  Key 자체의 데이터값을 기준으로 정렬

 

 

 

▶  Map 의 Key 로 사용되는 객체는 hashCode() , equals() 를 반드시 구현해야 한다.

▶  실무에서는 Map 이 필요한 경우 HashMap 을 많이 사용한다. 그리고 순서 유지, 정렬의 필요에 따라서

      LinkedHashMap , TreeMap 을 선택하면 된다.

 

 

 

 

※ 해당 내용은 인프런 김영한 강사님의  "실전 자바 중급2" 인강의 자료와 예시들을 참고하였습니다

반응형
Comments