본문 바로가기

Java/Java 알고리즘 인프런

HashMap 값으로 키 가져오기

반응형

최댓값, 최솟값 바로 출력

1. Collections 이용

//최댓값
Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey()

//최솟값
Collections.min(map.entrySet(), Map.Entry.comparingByValue()).getKey())

2. Stream 이용

//최댓값
map.entrySet().stream().max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1).get().getKey();

//최솟값
map.entrySet().stream().min((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1).get().getKey();

 

 

값을 찾고 나서 따로 출력

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;

for (int y : map.values()) {
    min = Math.min(y, min);
}

for (int y : map.values()) {
    max = Math.max(y, max);
}

 

값으로 키 출력

1. Keyset이용

//keySet이용
for (Character key : map.keySet()) {
			Integer value = map.get(key);
			System.out.print(key + " " + value + ", ");
}

2. entrySet이용

for (Map.Entry<Character, Integer> entry : map.entrySet()) {
			char key = entry.getKey();
			int value = entry.getValue();
			System.out.print(key + " " + value + ", ");
 }

 


 

package hashtree04_2;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Valuetokey {
	public void solution(int n, String str) {
		char[] arr = str.toCharArray();

		HashMap<Character, Integer> map = new HashMap<>();
		for (int i = 0; i < n; i++) {
			map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
		}

		// 1. Collections을 이용한 최댓값, 최솟값 키 찾기
		System.out.println("Collections 이용 : " + Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey()
				+ " " + Collections.min(map.entrySet(), Map.Entry.comparingByValue()).getKey());

		// 2. Stream을 이용한 최댓값, 최솟값 키 찾기
		System.out.println("Stream 이용 : "
				+ map.entrySet().stream().max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1).get()
						.getKey()
				+ " " + map.entrySet().stream().min((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
						.get().getKey());

		// value로 키 가져오기
		int min = Integer.MAX_VALUE;
		int max = Integer.MIN_VALUE;
		for (int y : map.values()) {
			min = Math.min(y, min);
		}

		for (int y : map.values()) {
			max = Math.max(y, max);
		}

		// 1. keySet()이용
		System.out.println("keySet이용");
		for (Character key : map.keySet()) {
			Integer value = map.get(key);
			System.out.print(key + " " + value + ", ");

			if (value == min) {
				System.out.println("keySet 이용한 min:"+key);
			}
			if (value == max) {
				System.out.println("keySet 이용한 max:"+key);
			}
		}

		System.out.println();
		
		// 2. entrySet() 이용
		System.out.println("entrySet이용");
		for (Map.Entry<Character, Integer> entry : map.entrySet()) {
			char key = entry.getKey();
			int value = entry.getValue();
			System.out.print(key + " " + value + ", ");

			if (value == min) {
				System.out.println("entrySet 이용한 min:"+key);
			}
			if (value == max) {
				System.out.println("entrySet 이용한 max:"+key);
			}
		}

	}

	public static void main(String[] args) {
		Valuetokey T = new Valuetokey();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		String str = kb.next();
		T.solution(n, str);

	}

}

 

반응형