소개
이 랩에서는 Java 에서 특정 값이 HashMap에 존재하는지 확인하는 방법을 배우게 됩니다. HashMap 클래스에서 제공하는 편리한 containsValue() 메서드를 살펴보고, 이 메서드가 값이 존재하는지 효율적으로 확인하는 방법을 알아보겠습니다.
또한, 맵의 값을 수동으로 반복 처리하여 확인을 수행하는 방법을 살펴보고, 대체 접근 방식을 제공합니다. 마지막으로, 맵 내에서 null 값의 존재 여부를 확인할 때 처리하는 방법에 대해 논의합니다.
containsValue() 를 사용하여 값 확인
이 단계에서는 Java 에서 특정 값이 HashMap에 존재하는지 확인하는 방법을 살펴보겠습니다. HashMap은 키 - 값 쌍을 저장하는 매우 유용한 데이터 구조입니다. 때로는 키에 관계없이 특정 값이 맵에 있는지 알아야 할 수 있습니다.
Java 의 HashMap 클래스는 이를 위해 containsValue()라는 편리한 메서드를 제공합니다. 이 메서드는 값을 인수로 받아, 맵에 지정된 값과 동일한 값이 있는 키 - 값 매핑이 하나 이상 포함되어 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
containsValue()를 사용하는 방법을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다 (아직 열려 있지 않은 경우).파일의 전체 내용을 다음 코드로 바꿉니다.
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", 35); ages.put("David", 25); // Another person with age 25 // Check if a specific value exists int valueToCheck = 25; boolean contains25 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains25); valueToCheck = 40; boolean contains40 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains40); } }이 코드의 새로운 부분을 살펴보겠습니다.
import java.util.HashMap;: 이 줄은 사용해야 하는HashMap클래스를 가져옵니다.HashMap<String, Integer> ages = new HashMap<>();: 이 줄은 키가String(이름과 같은) 이고 값이Integer(나이와 같은) 인 새로운HashMap을 생성합니다.ages.put("Alice", 30);및 유사한 줄: 이 줄은HashMap에 키 - 값 쌍을 추가합니다.int valueToCheck = 25;: 이 줄은 정수 변수valueToCheck를 선언하고 값 25 를 할당합니다.boolean contains25 = ages.containsValue(valueToCheck);: 여기에서containsValue()메서드를 사용합니다.valueToCheck에 저장된 값 (25) 이ages맵의 값에 있는지 확인합니다. 결과 (true또는false) 는contains25부울 변수에 저장됩니다.System.out.println(...): 이 줄은 결과를 콘솔에 출력합니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
터미널에서 프로그램을 컴파일합니다.
javac HelloJava.java오류가 없으면
HelloJava.class파일이 생성됩니다.컴파일된 프로그램을 실행합니다.
java HelloJava맵에 값 25 와 40 이 있는지 여부를 나타내는 출력을 볼 수 있습니다.
Does the map contain the value 25? true Does the map contain the value 40? false
이것은 containsValue() 메서드를 사용하여 HashMap에서 값의 존재 여부를 얼마나 쉽게 확인할 수 있는지 보여줍니다.
수동으로 값 순회하기
이전 단계에서는 내장된 containsValue() 메서드를 사용하여 값을 확인했습니다. 이것이 가장 효율적인 방법이지만, HashMap의 모든 값을 반복 처리하여 값을 수동으로 확인하는 방법을 이해하는 것도 도움이 됩니다. 이 프로세스에는 모든 값의 컬렉션을 가져온 다음 하나씩 반복 처리하는 작업이 포함됩니다.
Java 의 HashMap은 맵에 포함된 값의 Collection 뷰를 반환하는 values()라는 메서드를 제공합니다. 그런 다음 루프를 사용하여 이 Collection을 반복 처리할 수 있습니다.
값을 반복 처리하여 값 25 가 존재하는지 수동으로 확인하도록 프로그램을 수정해 보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.기존 코드를 다음 코드로 바꿉니다.
import java.util.HashMap; import java.util.Collection; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", 35); ages.put("David", 25); // Another person with age 25 // Get a collection of all values Collection<Integer> allAges = ages.values(); // Manually check if a specific value exists by looping int valueToCheck = 25; boolean foundManually = false; for (Integer age : allAges) { if (age.equals(valueToCheck)) { foundManually = true; break; // Exit the loop once the value is found } } System.out.println("Does the map contain the value " + valueToCheck + " (manual check)? " + foundManually); valueToCheck = 40; foundManually = false; // Reset for the next check for (Integer age : allAges) { if (age.equals(valueToCheck)) { foundManually = true; break; } } System.out.println("Does the map contain the value " + valueToCheck + " (manual check)? " + foundManually); } }새로운 내용 또는 변경된 내용은 다음과 같습니다.
import java.util.Collection;:ages.values()가Collection을 반환하므로Collection인터페이스를 가져옵니다.Collection<Integer> allAges = ages.values();: 이 줄은ages맵에서 모든 정수 값 (나이) 을 포함하는Collection을 가져옵니다.for (Integer age : allAges): 이것은allAges컬렉션의 각Integer요소를 반복 처리하는 향상된 for 루프 (for-each 루프라고도 함) 입니다. 각 반복에서 현재 값은age변수에 할당됩니다.if (age.equals(valueToCheck)): 루프 내에서 현재age를valueToCheck와 비교합니다. 객체 (예:Integer) 를 비교하기 위해equals()를 사용합니다. 이는 객체에 대해==를 사용하는 것보다 일반적으로 안전합니다.foundManually = true;: 일치하는 항목이 발견되면foundManually를true로 설정합니다.break;: 이 문은 값을 찾으면 즉시 루프를 종료하여 확인을 더 효율적으로 만듭니다.
파일을 저장합니다.
프로그램을 컴파일합니다.
javac HelloJava.java프로그램을 실행합니다.
java HelloJava출력은 이전 단계와 동일해야 하며, 수동 확인이 올바르게 작동하는지 확인합니다.
Does the map contain the value 25 (manual check)? true Does the map contain the value 40 (manual check)? false
수동으로 반복 처리하는 것도 작동하지만, containsValue()는 더 간결하고 Java 라이브러리 내에서 성능에 최적화되어 있는 경우가 많으므로 일반적으로 선호됩니다. 그러나 값을 반복 처리하는 방법을 이해하는 것은 다른 많은 시나리오에서 유용한 기본적인 기술입니다.
Null 값 처리
Java 에서 null은 "객체가 없음"을 의미하는 특수한 값입니다. HashMap이 null 값을 처리하는 방법과 containsValue()가 null을 처리할 때 어떻게 동작하는지 이해하는 것이 중요합니다.
Java 의 HashMap은 null 값을 저장할 수 있습니다. 값이 null인 매핑을 추가할 수 있습니다.
null 값을 포함하도록 프로그램을 수정하고 containsValue()가 어떻게 작동하는지 살펴보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.기존 코드를 다음 코드로 바꿉니다.
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs, including a null value ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", null); // Charlie's age is unknown (null) ages.put("David", 25); // Check if a specific value exists, including null int valueToCheck = 25; boolean contains25 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains25); Integer nullValue = null; boolean containsNull = ages.containsValue(nullValue); System.out.println("Does the map contain the value null? " + containsNull); valueToCheck = 40; boolean contains40 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains40); } }다음은 주요 변경 사항입니다.
ages.put("Charlie", null);: "Charlie" 키가null값과 연결된 매핑을 추가했습니다.Integer nullValue = null;:Integer변수를 생성하고null값을 할당합니다.boolean containsNull = ages.containsValue(nullValue);:containsValue()를 사용하여 맵에null값이 포함되어 있는지 확인합니다.
파일을 저장합니다.
프로그램을 컴파일합니다.
javac HelloJava.java프로그램을 실행합니다.
java HelloJava출력, 특히
null을 확인하는 줄을 관찰합니다.Does the map contain the value 25? true Does the map contain the value null? true Does the map contain the value 40? false
보시다시피, containsValue()는 HashMap에 null 값을 명시적으로 추가했기 때문에 null 값이 포함되어 있음을 올바르게 식별합니다. 이는 HashMap이 null 값을 저장할 수 있고 containsValue()를 사용하여 해당 값의 존재 여부를 확인할 수 있음을 확인합니다.
null 값 처리는 Java 프로그래밍의 중요한 측면입니다. 데이터 구조에 null이 포함될 수 있는지 여부와 이러한 경우 코드의 동작 방식을 항상 염두에 두십시오.
요약
이 Lab 에서는 Java 에서 HashMap에 특정 값이 포함되어 있는지 확인하는 방법을 배웠습니다. 탐구한 주요 메서드는 containsValue()였으며, 이는 맵 내에서 값의 존재 여부를 확인하는 간단한 방법을 제공합니다. 이 메서드를 간단한 예제와 함께 사용하여 대상 값이 맵에 존재하는지 여부에 따라 반환 값을 확인하는 방법을 살펴보았습니다.
또한 맵의 값을 수동으로 반복 처리하는 것과 같은 값 존재 여부를 확인하는 대체 방법을 살펴보았습니다. 또한, 이 Lab 에서는 HashMap에서 값 확인에 대한 포괄적인 이해를 보장하기 위해 맵에서 null 값의 존재 여부를 확인할 때 null 값을 처리하는 방법을 다루었습니다.



