E재HO 2023. 4. 5. 15:57

map은 알고리즘을 풀 때, 엄청 ~ 많이 쓰이니까 잘 알아 둬야 한다. 특히 순회와 정렬은 잘 알고 있어야 풀리는 문제가 많다.

1. 순회

//hm.entrySet() 이용하기
//Map은 Key-Value 묶음을 가지기 때문에 Entry 라고 표현한다.
        Map<String, String> hm = new HashMap<>();
        hm.put("hi","a");
        hm.put("h2","b");
        hm.put("he","c");
        for(Map.Entry<String,String> entry : hm.entrySet()){
            System.out.println(entry.getKey());
            System.out.print(" "+entry.getValue());
        }
hi a
h2 b
he c

이 방식은 Map 전체를 다 빼와서 key와 value를 언제든지 받아볼 수 있어서 좋다.

// 또 다른 방식은 keySet()이용하기 
        Map<String,String> hm = new HashMap<>();
        hm.put("hi","a");
        hm.put("h2","b");
        hm.put("he","c");

        for(String key : hm.keySet()){
            System.out.println(hm.get(key));
        }

a
b
c

이 방식은 간단해서 좋다.

2. 정렬

우선 리스트 방식으로 정렬하는 것을 알아보자.
map의 key나 value를 List로 이식한다.
그리고 이식된 List 를 정렬.

//List를 이용한 정렬 방식 
        Map<String,String> hm = new HashMap<>();
        hm.put("hi","a");
        hm.put("h2","b");
        hm.put("he","c");

        //value값으로 정렬 하거나 key값으로 정렬
        // List<String> list = new ArrayList<>(hm.keySet());
        List<String> list = new ArrayList<>(hm.values());


        list.sort( (o1,o2) -> o1.compareTo(o2)); 
        for(String now : list ){
            System.out.println(hm.get(now));
        }
// value값으로 정렬 시 
h2
he
hi
// key값으로 정렬 시 
a
b
c

하지만 이 방식은 value 값으로 정렬한다 하더라도 큰 의미가 없을 수 있다. value값으로 정렬해도 정렬된 value 값으로 해당 key을 조회할 수 없어서 무용한 순간이 온다.

좀 어렵지만 확실한 방법은 TreeMap을 사용하는 것이다.

이 두가지를 알아야 맵을 활용한 문제에서도 당황하지 않을 수 있다.

map은 알고리즘을 풀 때, 엄청 ~ 많이 쓰이니까 잘 알아 둬야 한다. 특히 순회와 정렬은 잘 알고 있어야 풀리는 문제가 많다.