이 글에서는 값(value)을 이용해 Java HashMap에서 키(key)를 가져오는 방법을 살펴봅니다. Java HashMap은 Java의 Map 인터페이스를 해시 테이블 기반으로 구현한 자료구조로, 키와 값이 한 쌍을 이루어 저장되는 컬렉션입니다.
아래 예제를 통해 실제 동작 과정을 확인해 보겠습니다.
입력 예시
입력 HashMap: {Java=8, Scala=5, Python=15}
검색할 값: 8
출력 결과
값이 8인 항목의 키: Java
알고리즘
1단계 - 프로그램을 시작합니다. 2단계 - 필요한 변수를 선언합니다. 3단계 - 값을 정의합니다. 4단계 - 문자열과 정수로 구성된 HashMap을 생성하고 'put' 메서드로 요소를 초기화합니다. 5단계 - 검색할 값을 정의합니다. 6단계 - HashMap의 요소를 순회하며 앞서 정의한 값이 존재하는지 확인합니다. 7단계 - 해당 값을 찾으면 루프를 빠져나옵니다. 8단계 - 결과를 화면에 출력합니다. 9단계 - 프로그램을 종료합니다.
예제 1: main 메서드에서 처리하기
첫 번째 예제는 모든 연산을 하나의 'main' 메서드 안에서 함께 처리하는 방식입니다.
import java.util.HashMap;
import java.util.Map.Entry;
public class Demo {
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
HashMap<String, Integer> input_map = new HashMap<>();
input_map.put("Scala", 5);
input_map.put("Java", 8);
input_map.put("Python", 15);
System.out.println("정의된 HashMap: " + input_map);
Integer key = 8;
for(Entry<String, Integer> entry : input_map.entrySet()) {
if(entry.getValue().equals(key)) {
System.out.println("\n값이 " + key + "인 항목의 키: " + entry.getKey());
break;
}
}
}
}
실행 결과
필요한 패키지가 임포트되었습니다
정의된 HashMap: {Java=8, Scala=5, Python=15}
값이 8인 항목의 키: Java
예제 2: 객체 지향 방식으로 분리하기
두 번째 예제는 검색 로직을 별도의 메서드로 캡슐화하여 객체 지향 프로그래밍 스타일로 작성한 것입니다. 코드의 재사용성과 가독성이 더욱 향상됩니다.
import java.util.HashMap;
import java.util.Map.Entry;
public class Demo {
static void findKey(HashMap<String, Integer> input_map, Integer key) {
for(Entry<String, Integer> entry : input_map.entrySet()) {
if(entry.getValue().equals(key)) {
System.out.println("\n값이 " + key + "인 항목의 키: " + entry.getKey());
break;
}
}
}
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
HashMap<String, Integer> input_map = new HashMap<>();
input_map.put("Scala", 5);
input_map.put("Java", 8);
input_map.put("Python", 15);
System.out.println("정의된 HashMap: " + input_map);
Integer key = 8;
findKey(input_map, key);
}
}
실행 결과
필요한 패키지가 임포트되었습니다
정의된 HashMap: {Java=8, Scala=5, Python=15}
값이 8인 항목의 키: Java
알아두면 좋은 점
- equals() 사용 권장: Integer 객체를 비교할 때 '==' 연산자는 객체 참조를 비교하기 때문에 -128~127 범위를 벗어나는 값에서는 의도치 않은 결과가 나올 수 있습니다. 따라서 'equals()' 메서드를 사용하는 것이 안전합니다.
- 중복 값 주의: HashMap에서는 서로 다른 키가 같은 값을 가질 수 있습니다. 위 코드는 조건을 만족하는 첫 번째 키만 반환한 뒤 루프를 종료합니다.
- 순서 미보장: HashMap은 요소의 저장 순서를 보장하지 않으므로, 실행 환경에 따라 출력 순서가 달라질 수 있습니다.