코딩테스트

Sort a HashMap in Java - Sort Function 완성하기

728x90

Map

JAVA 컬렉션에 대해 공부했을 때, Map에 대해 배운 정의 및 특징은 다음과 같았다.

  • 키, 값 (key, value) 쌍으로 이루어진 데이터 집합
  • 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복 허용
  • 구현체 - HashMap, HashTable, Properties
HashMap<Integer, String> map = new HashMap<Integer, String>();
  • map의 데이터 저장방식 자체가 key-value 방식이기 때문에 key를 통해 value를 알아내는 것이 가능하다.
  • key : 데이터를 찾는 열쇠(이름) 
  • value : 실질적인 데이터

따라서, 순서가 중요하지 않을 때는 map을 사용하고는 했는데

코딩테스트 문제를 풀던 중 Hashmap 형태로 저장한 데이터를 정렬(Sort) 해야만 하는 케이스가 생겼다.

map은 데이터 저장 시 순서가 유지되지 않는데 어떻게 정렬할 수 있다는 걸까?

 


📚 오늘의 숙제

sort function을 완성하기
www.baeldung.com/java-hashmap-sort

기초부터해서 따라가면서 해보고, int, int 로 key, value 각각 정렬하는거 새로 만들어서 업로드
저 링크안에 트리로 하는방법도 나와있는데  많은 내용이 들어있으니 천천히 보세요.

 

문제

package heejeong;

import java.util.HashMap;

public class SortHashMap0318 {
    public static void main(String[] args) {
        HashMap<Integer, Integer> unSortedMap = new HashMap<Integer, Integer>();
        unSortedMap.put(1, 1);
        unSortedMap.put(5, 3);
        SortHashMap(unSortedMap);
        return;
    }

    public static HashMap<Integer, Integer> SortHashMap(HashMap<Integer, Integer> hashmap) {
        //let's sort
        System.out.println(hashmap);
        return hashmap;
    }
}

내 풀이

1. Value 값을 기준으로 정렬되는지 확인하기 위해 요소 추가

2. main 에는 return 불필요해서 해당 코드 삭제

3. Key는 간단하게 TreeMap에 넣었다가 빼주었고 (?) 안빼준듯

4. Value는 Value 기준으로 정렬해서 새로 Hashmap 형태로 만들어준다음 기존 hashmap에 대입.

public class SortHashMap0318 {
    public static void main(String[] args) {
        HashMap<Integer, Integer> unSortedMap = new HashMap<>();
        unSortedMap.put(1, 1);
        unSortedMap.put(5, 3);
        //요소 추가
        unSortedMap.put(2, 6);
        SortHashMap(unSortedMap);
    }

    public static HashMap<Integer, Integer> SortHashMap(HashMap<Integer, Integer> hashmap) {
        //let's sort

        //1. sort by key - TreeMap (Key 기준으로 오름차순 정렬)
        TreeMap<Integer, Integer> sortByKeys = new TreeMap<>();
        sortByKeys.putAll(hashmap);
        System.out.println("sort by key = "+sortByKeys);

        //2. sort by value - Using the Stream API (Value 기준으로 오름차순 정렬)
        hashmap = hashmap.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldValue,newValue) -> oldValue, LinkedHashMap::new));
        System.out.println("sort by values = "+hashmap);

        return hashmap;
    }
}

Sort a HashMap in Java 

자세한 정렬방식은 연결된 링크 페이지에!

1. TreeMap >>

2. ArrayList and Collections.sort() >>

3. TreeSet >>

4. Using the Stream API >>

5. Using the Guava library >>

728x90

'코딩테스트' 카테고리의 다른 글

Sort a HashMap in Java - (2) Using ArrayList  (0) 2021.03.18
Sort a HashMap in Java - (1) TreeMap  (0) 2021.03.18
[LeetCode] 860. Lemonade Change  (2) 2021.03.18
[LeetCode] 1. Two Sum  (4) 2021.03.16
[LeetCode] 347. Top K Frequent Elements  (0) 2021.03.15