Javamap


title: 2025-08-30 author: 강병호 date: 2025-08-30 category: TIL/강병호/2025/08 layout: post —

모던 자바 인 액션을 보고 정리하였습니다.

8.3 Map 처리

8.3.1 forEach 메서드

맵에서 키와 값을 반복하면서 확인하며 다음과 같이 구현할 수 있다.

```
ageOfFriends.forEach((friend, age) -> System.out.println(friend + " is " + age + " years old"));
```

8.3.2 정렬 메서드

다음 두 개의 유틸리티를통해 값 또는 키 기준으로 정렬할 수 있다.

  • Entry.comparingByValue
  • Entry.comparingByKey
Map<String, String> favoriteMoviews = Map.ofEntreis(
		entry("Raphael", "Star Wars"),
		entry("Cristina", "Matrix"),
		entry("Olivia", James Bond")
);

favoriteMovies
	.entrySet()
	.stream()
	.sorted(Entry.comparingByKey())
	.forEachOrderd(System.out::println);

[!HashMap 성능] > 자바 9에서 HashMap의 내부 구조를 바꾸어 성능을 개선했다. 기존에는 키로 생성한 해시코드로 접근할 수 있는 버켓에 저장되어 키가 같은 많은 해시코드를 반환하는 경우에 O(n)의 시간이 걸리는 LinkedList로 버킷을 반환하여 성능이 저하되는 경우가 있었다. > 그러나 최근 버킷이 너무 커지는 경우 O(log(n))의 시간이 소요되는 정렬된 트리를 이용해 동적으로 치환해 충돌이 일어나는 요소 반환 성능을 개선했다.

8.3.3 getOrDefault 메서드

기존에 찾으려는 키가 존재하지 않는 경우 Null이 반환되기에 NullPointerException 에러 방지를 위해 요청 결과가 Null인지 확인하는 로직이 필요했다. getOrDefault 메서드의 등장은 이 문제를 쉽게처리할 수있다.

```
Map<String, String> favoriteMoviews = Map.ofEntreis(
	entry("Raphael", "Star Wars"),
	entry("Cristina", "Matrix"),
	entry("Olivia", James Bond"));

System.out.println(favouriteMovies.getOrDefault("Olivia", "Matrix"));
System.out.println(favouriteMovies.getOrDefault("Thibaut", "Matrix")); // Matrix 출력
```

8.3.4 계산 패턴

맵에 키가 존재하는지 여부에 따라 동작을 실행하고 결과를 저장하는 상황에 다음 세 가지 연산이 도움을 준다.

  • computeIfAbsent : 제공된 키에 해당하는 값이 없으면, 키를 이용해 새 값을 계산하고 맵에 추간하다.
  • computeIfPresent : 제공된 키가 존재하면 새 값을 계산하고 맵에 추가한다.
  • compute : 제공된 키로 새 값을 계산하고 맵에 저장한다.

``` lines.forEach(line -> dataToHash.computeIfAbsent(line, this::calculateDigest));

frendsToMovies.computeIfAbsent(“Raphael”, name -> new ArrayList<>()) .add(“Star Wars”)

results matching ""

    No results matching ""