JAVA

Map.Entry와 Map.getKey 차이

silver-w 2024. 12. 29. 19:58

일반적인 Map 사용

char[] input = "bbbaa".toUpperCase().toCharArray();

Map<Character, Integer> map = new HashMap<>();
for (Character c : input) {
    int cnt = 0;
    for (char i : input) {
        if(c == i) cnt++;
    }
    map.put(c, cnt);
}

 

map.entry 를 사용하지 않을 때

 keySet을 반복하고, Map.get으로 해당 값을 얻는다.

for (Character c : map.keySet()) {
    System.out.println("c = " + c + "=" + map.get(c));
}

 

결과

c = A=3
c = B=2

map.entry 를 사용하였을 때

 key-value의 데이터를 결합된 형태로 Set에 저장하여 반환해준다. 위와같이 keySet -> get(key) 형태로 하지 않아도 같은 결과를 출력한다.

List<Map.Entry<Character, Integer>> m = new ArrayList<>(map.entrySet());
for (Map.Entry<Character, Integer> c : m) {
    System.out.println("c = " + c);
}

결과 

c = A=3
c = B=2

정렬식(List.sort()사용)

 List.sort()는 List의 크기만큼 요소들을 두 개씩 비교하면서 정렬을 진행한다

 entry1과 entry2는 각 비교 단계에서 List에 있는 Map.Entry 객체 두 개를 자동으로 가리킨다(직접 entry1, entry2 변수를 지정할 필요없이 List.sort()가 자동으로 처리해준다)

m.sort((entry1, entry2) -> {
    int descVal = entry2.getValue().compareTo(entry1.getValue());
    return descVal;
});

결과

m = [A=3, B=2]

'JAVA' 카테고리의 다른 글

Jakarta Mail(JavaMail) API  (0) 2025.02.11
중첩 클래스  (0) 2024.12.22
동시성 문제와 동기화(synchronized)  (0) 2024.11.24
멀티스레드 메모리 접근 방식/메모리 가시성/happens-before  (0) 2024.11.21
스레드와 Yield  (0) 2024.11.18