Java 에서 Map 에 특정 값이 있는지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 특정 값이 HashMap에 존재하는지 확인하는 방법을 배우게 됩니다. HashMap 클래스에서 제공하는 편리한 containsValue() 메서드를 살펴보고, 이 메서드가 값이 존재하는지 효율적으로 확인하는 방법을 알아보겠습니다.

또한, 맵의 값을 수동으로 반복 처리하여 확인을 수행하는 방법을 살펴보고, 대체 접근 방식을 제공합니다. 마지막으로, 맵 내에서 null 값의 존재 여부를 확인할 때 처리하는 방법에 대해 논의합니다.

containsValue() 를 사용하여 값 확인

이 단계에서는 Java 에서 특정 값이 HashMap에 존재하는지 확인하는 방법을 살펴보겠습니다. HashMap은 키 - 값 쌍을 저장하는 매우 유용한 데이터 구조입니다. 때로는 키에 관계없이 특정 값이 맵에 있는지 알아야 할 수 있습니다.

Java 의 HashMap 클래스는 이를 위해 containsValue()라는 편리한 메서드를 제공합니다. 이 메서드는 값을 인수로 받아, 맵에 지정된 값과 동일한 값이 있는 키 - 값 매핑이 하나 이상 포함되어 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

containsValue()를 사용하는 방법을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다 (아직 열려 있지 않은 경우).

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    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(...): 이 줄은 결과를 콘솔에 출력합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 프로그램을 컴파일합니다.

    javac HelloJava.java

    오류가 없으면 HelloJava.class 파일이 생성됩니다.

  5. 컴파일된 프로그램을 실행합니다.

    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 가 존재하는지 수동으로 확인하도록 프로그램을 수정해 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다.

  2. 기존 코드를 다음 코드로 바꿉니다.

    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)): 루프 내에서 현재 agevalueToCheck와 비교합니다. 객체 (예: Integer) 를 비교하기 위해 equals()를 사용합니다. 이는 객체에 대해 ==를 사용하는 것보다 일반적으로 안전합니다.
    • foundManually = true;: 일치하는 항목이 발견되면 foundManuallytrue로 설정합니다.
    • break;: 이 문은 값을 찾으면 즉시 루프를 종료하여 확인을 더 효율적으로 만듭니다.
  3. 파일을 저장합니다.

  4. 프로그램을 컴파일합니다.

    javac HelloJava.java
  5. 프로그램을 실행합니다.

    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은 "객체가 없음"을 의미하는 특수한 값입니다. HashMapnull 값을 처리하는 방법과 containsValue()null을 처리할 때 어떻게 동작하는지 이해하는 것이 중요합니다.

Java 의 HashMapnull 값을 저장할 수 있습니다. 값이 null인 매핑을 추가할 수 있습니다.

null 값을 포함하도록 프로그램을 수정하고 containsValue()가 어떻게 작동하는지 살펴보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다.

  2. 기존 코드를 다음 코드로 바꿉니다.

    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 값이 포함되어 있는지 확인합니다.
  3. 파일을 저장합니다.

  4. 프로그램을 컴파일합니다.

    javac HelloJava.java
  5. 프로그램을 실행합니다.

    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()HashMapnull 값을 명시적으로 추가했기 때문에 null 값이 포함되어 있음을 올바르게 식별합니다. 이는 HashMapnull 값을 저장할 수 있고 containsValue()를 사용하여 해당 값의 존재 여부를 확인할 수 있음을 확인합니다.

null 값 처리는 Java 프로그래밍의 중요한 측면입니다. 데이터 구조에 null이 포함될 수 있는지 여부와 이러한 경우 코드의 동작 방식을 항상 염두에 두십시오.

요약

이 Lab 에서는 Java 에서 HashMap에 특정 값이 포함되어 있는지 확인하는 방법을 배웠습니다. 탐구한 주요 메서드는 containsValue()였으며, 이는 맵 내에서 값의 존재 여부를 확인하는 간단한 방법을 제공합니다. 이 메서드를 간단한 예제와 함께 사용하여 대상 값이 맵에 존재하는지 여부에 따라 반환 값을 확인하는 방법을 살펴보았습니다.

또한 맵의 값을 수동으로 반복 처리하는 것과 같은 값 존재 여부를 확인하는 대체 방법을 살펴보았습니다. 또한, 이 Lab 에서는 HashMap에서 값 확인에 대한 포괄적인 이해를 보장하기 위해 맵에서 null 값의 존재 여부를 확인할 때 null 값을 처리하는 방법을 다루었습니다.