Java/컬렉션

[Java]HashMap 값 변경하는 방법

DevStory 2022. 8. 30.

HashMap 값 변경하는 방법

이번 포스팅은 HashMap의 값을 변경할 수 있는 몇 가지 방법을 소개합니다.


방법 1. 특정 키에 해당하는 값을 새로운 값으로 변경 - put 메서드

특정 키에 해당하는 값을 변경하는 방법으로 HashMap 클래스에서 제공하는 put() 메서드를 사용할 수 있습니다.

public V put(K key, V value);

put() 메서드는 HashMap에 키와 값을 추가하는 메서드로 알려져 있으나 키가 이미 존재하는 경우 매핑되는 값이 변경됩니다.

public static void main(String args[]) {
  HashMap<String, Integer> hm = new HashMap<>();
  hm.put("React", 1000);

  System.out.println("[변경 전]");
  System.out.println(hm);

  hm.put("React", 5000);

  System.out.println("\n[변경 후]");
  System.out.println(hm);
}

[실행 결과]

[변경 전]
{React=1000}

[변경 후]
{React=5000}

방법 2. 특정 키에 해당하는 값을 새로운 값으로 변경 - replace 메서드

특정 키에 해당하는 값을 변경하는 방법으로 HashMap 클래스에서 제공하는 replace() 메서드를 사용할 수 있습니다.

public V replace(K key, V value);

첫 번째 매개변수에 특정 키를 전달하고 두 번째 매개변수에 변경하고 싶은 값을 전달합니다.

 

put() 메서드와 replace() 메서드는 특정 키와 매핑되는 변경되기 이전 값을 변경한다는 점은 유사하지만, null을 반환하는 경우가 다릅니다.

 

put() 메서드

- 키가 등록되지 않았다면, null을 반환합니다.

 

replace() 메서드

- 키가 존재하지 않으면, null을 반환합니다.

 

다음 예제는 키가 "React"인 값을 5000으로 변경합니다.

public static void main(String args[]) {
  HashMap<String, Integer> hm = new HashMap<>();
  hm.put("React", 1000);

  System.out.println("[변경 전]");
  System.out.println(hm);

  hm.replace("React", 5000);

  System.out.println("\n[변경 후]");
  System.out.println(hm);
}

[실행 결과]

[변경 전]
{React=1000}

[변경 후]
{React=5000}

방법 3. 특정 키에 해당하는 기존 값을 수정

특정 키에 해당하는 기존 값을 수정해야 하는 경우가 발생할 수 있습니다.

 

예를 들어, 키가 "React"인 값이 10으로 할당되어있는데, 값에 10을 곱해야 합니다.

 

이러한 경우 HashMap의 put() 메서드와 get() 메서드를 함께 사용합니다.

 

[변경 방법]

순서 1. put() 메서드의 첫 번째 매개변수에 키를 전달합니다.

순서 2. get() 메서드로 해당 키의 값을 가져온 뒤 10을 곱하는 연산을 put() 메서드의 두 번째 매개변수에 전달합니다.

 

다음 예제는 키가 "React"인 값에 10을 곱합니다.

public static void main(String args[]) {
  HashMap<String, Integer> hm = new HashMap<>();
  hm.put("React", 10);

  System.out.println("[변경 전]");
  System.out.println(hm);

  hm.put("React" , hm.get("React") * 10);

  System.out.println("\n[변경 후]");
  System.out.println(hm);
}

[실행 결과]

[변경 전]
{React=10}

[변경 후]
{React=100}

방법 4. 기존 값을 수정

HashMap의 모든 값을 수정해야 하는 경우 for문과 entrySet() 메서드 그리고 Map.Entry를 사용합니다.

 

[변경 방법]

순서 1. HashMap에 entrySet() 메서드를 호출하여 Set으로 변환합니다.

순서 2. Set으로 변환된 결과를 for문을 사용하여 순회합니다.

순서 3. Set의 요소를 Map.Entry로 접근합니다.

순서 4. Map.Entry의 setValue()와 getValue() 메서드를 사용하여 값을 수정합니다.

 

다음 예제는 HashMap의 모든 값에 10을 곱합니다.

public static void main(String args[]) {
  HashMap<String, Integer> hm = new HashMap<>();
  hm.put("React", 10);
  hm.put("Java", 20);
  hm.put("JavaScript", 30);
  hm.put("TypeScript", 40);

  System.out.println("[변경 전]");
  System.out.println(hm);;

  for (Map.Entry<String,Integer> item : hm.entrySet()){
    item.setValue(item.getValue() * 10);
  }
  
  System.out.println("\n[변경 후]");
  System.out.println(hm);
}

[실행 결과]

[변경 전]
{TypeScript=40, Java=20, JavaScript=30, React=10}

[변경 후]
{TypeScript=400, Java=200, JavaScript=300, React=100}

방법 5. 특정 조건을 만족하는 모든 값 변경

HashMap에서 제공하는 replaceAll() 메서드를 사용하여 특정 조건을 만족하는 모든 값을 변경할 수 있습니다.

public void replaceAll(BiFunction<? super K, ? super V, ? extends V> function);

주로, 다음과 같은 상황에서 사용할 수 있습니다.

- 키에 특정 문자열이 포함되는 값만 변경

- 특정 범위에 속하는 값만 변경

 

다음 예제는 HashMap의 키에 문자열 "Script"가 포함되면 값에 10을 곱합니다.

public static void main(String args[]) {
  HashMap<String, Integer> hm = new HashMap<>();
  hm.put("React", 10);
  hm.put("Java", 20);
  hm.put("JavaScript", 30);
  hm.put("TypeScript", 40);

  System.out.println("[변경 전]");
  System.out.println(hm);;

  hm.replaceAll((key, value) -> {
    if(key.contains("Script")) {
      return value * 10;
    }
    return value;
  });
  
  System.out.println("\n[변경 후]");
  System.out.println(hm);
}

[실행 결과]

[변경 전]
{TypeScript=40, Java=20, JavaScript=30, React=10}

[변경 후]
{TypeScript=400, Java=20, JavaScript=300, React=10}
반응형

댓글