본문 바로가기

개발(합니다)/Java&Spring

Java HashMap 정렬하기

반응형

알고리즘 문제를 풀면서, 현업에서 쉽게 중복을 제거하고 정렬하는 방법을 고민한적이 있습니다.




문제 : 아스키 코드화 하여 문자열 정렬


String[] str =
{ "but", "i", "wont", "hesitate", "no", "more", "no", "more", "it", "cannot", "wait", "im",
                "yours" };

        HashMap<Integer, String> map = new HashMap<Integer, String>();
        int temp = 0;
        for (int i = 0; i < str.length; i++) {
            temp = 0;
            for (int j = 0; j < str[i].length(); j++) {
                temp += str[i].charAt(j) - 48;
            }
            map.put(temp, str[i]);
        }

문자를 아스키 코드로 변환하여 해쉬맵에 저장합니다.


저장 된 데이터




1. HashMap에서 정렬 하기

Iterator iter = mapSort(map).iterator();


    public static List<String> mapSort(final HashMap<String, Integer> map) {
        List<String> list = new ArrayList<String>();
        list.addAll(map.keySet());

        Collections.sort(list, new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                Object ob1 = map.get(o1);
                Object ob2 = map.get(o2);
                return ((Comparable) ob2).compareTo(ob1);
            }
        });
        Collections.reverse(list);
        return list;
    }


list.addAll에 해쉬맵을 저장하고 Collections.sort로 정렬합니다.


2. TreeMap에서 정렬 하기

        TreeMap<Integer, String> treeMap = new TreeMap<>(map);
        Iterator iter = treeMap.keySet().iterator();    // 오름차순
//      Iterator iter = treeMap.descendingKeySet().iterator(); // 내림차순
        

        while (iter.hasNext()) {
            Integer key = (Integer) iter.next();
            bw.write(String.valueOf(treeMap.get(key)));
            bw.newLine();
        }
        bw.close();

TreeMap은 정렬하여 map에 저장합니다.

출력 방법은 키로 값을 호출하는 방식입니다.



반응형