모던 자바 인 액션 8장 : 컬렉션 API 개선

Adam·2024년 7월 1일
0

모던 자바 인 액션

목록 보기
8/20
post-thumbnail

컬렉션 팩토리

리스트 팩토리

List.of 메소드로 간단히 리스트를 생성하는 것이 가능

List<String> friends = List.of("Adam", "Tori", "Michael");

데이터 처리 형식을 설정하거나 변환할 필요가 없을 때 사용

집합 팩토리

Set.of로 집합을 간단히 생성 가능

Set<String> friends = List.of("Adam", "Tori", "Micahel");

맵 팩토리

Map.of: 데이터량이 적을때 사용

Map.Entry<K,V>: 데이터량이 많을때 사용

Map<String, Integer> ageOfFriends = Map.of("Adam", 30, "Tori",28, "Michael", 50);
Map<String, Integer> ageOfFriends = Map.ofEntries(entry("Adam",30),
																									entry("Tori",28),
																									entry("Michael", 50));

리스트와 집합 처리

  • removeIf: 프레디케이트를 만족하는 요소를 제거(리스트, 셋에서 이용)
  • replaceAll: UnaryOperator 함수를 이용해 요소를 바꾼다(리스트에서 이용)
  • sort: 리스트를 정렬(리스트에서 이용)

맵 처리

  • forEach: 키와 값을 반복하면서 간단하게 확인 하는 것이 가능
  • Entry.comparingByValue: 맵을 값을 기반으로 비교
  • Entry.comparingByKey: 맵을 키를 기반으로 비교
  • getOrDefault: 첫번째 인수로 키, 두번째 인수로 기본값을 받으며 맵에 키가 존재하지 않으면 기본값을 반환
  • computeIfAbsent: 제공된 키에 해당하는 값이 없으면, 키를 이용해 새 값을 계산하고 맵에 추가
  • computeIfPresent: 제공된 키가 존재하면 새 값을 계산하고 맵에 추가
  • compute: 제공된 키로 새 값을 계산하고 맵에 저장
  • remove: 제공된 키값으로 맵에서 값 제거
  • replaceAll: BitFunction을 적용한 결과로 각 항목의 값을 교체
  • replace: 키가 존재하면 맵의 값을 바꾼다
  • putAll, merge: 맵을 합칠 수 있다

ConcurrentHashMap

동시성 친화적인 HashMap

내부 자료구조의 특정 부분만 잠궈 동시추가, 갱신 작업을 허용

Hashtable에 비해 성능이 좋다

  • forEach: 각 쌍에 주어진 액션을 실행

  • reduce: 모든 쌍을 제공된 리듀스 함수를 이용해 결과로 합침

  • search: 널이 아닌 값을 반환할 때까지 각 쌍에 함수 적용

  • 키 값으로 연산: forEach, reduce, search

  • 키로 연산: forEachKey, reduceKeys, searchKeys

  • 값으로 연산: forEachValue, redeceValues, searchValues

  • Map.Entry 객체로 연산: forEachEntry, reduceEntries, searchEntries

이 연산들은 ConcurrentHashMap의 상태를 잠그지 않고 수행하기 때문에 계산이 진행되는 동안 바뀔 수 있는 객체, 값, 순서 등에 의존하지 않아야 한다

병렬성 기준값을 지정해야 한다

  • 기준값을 1로 지정하면 공통 스레드 풀을 이용해 병렬성 극대화
  • 기준값을 Long.MAX_VALUE로 하면 한개의 스레드로 연산을 실행

mappingCount: ConcurrentHashMap의 매핑 개수 반환

keySet: ConcurrentHashMap을 집합 뷰로 반환

profile
Keep going하는 개발자

0개의 댓글