기타

[개발용어] Load Factor, Threshold란?

GHM 2022. 12. 27. 23:37

Load Factor란?

용량 대비 데이터가 어느정도 찼을 때 내부적으로 사이즈 확장을 필요로하는 자료구조에서 사용되는 개념이다.

언제 사이즈를 늘려야하는지,
즉, 몇 번째 데이터를 추가할 때, 사이즈를 늘려야 하는지를 결정하는 척도, 기준

default 로드팩터는 0.75f 이다.

 

Load Factor를 어떤 용도로 사용할까?

사이즈가 가변적인 자료구조에 쓰이며 current capacity와 곱을 이뤄,
사이즈를 증가시켜야 하는 시기(=임계점)을 결정하는데 사용된다.


 

로드팩터가 존재하는 대표적인 자바 컬렉션 프레임워크

  • ArrayList
  • HashMap
  • Hashtable
  • ConcurrentHashMap
  • HashSet 
  • 등등..

일반적으로 default load factor는 0.75이지만,

ArrayList의 load factor는 1 이다.

 

StringBuilder에도 Load Factor 가 존재할까?

  • ArrayList와 StringBuilder는 동작과정이 비슷하지만, StringBuilder에는 로드팩터가 업다.
    스트링빌더는 capacity가 꽉 찼을 때, 사이즈를 2배 증가시킨다.

Threshold란?

: 임계점, 한계점, 문지방

 

로드팩터와 같이 쓰이는 개념이다.

특정 자료구조의 현재 용량과 지정된 로드팩터를 곱해 나오는 결과값을 threshold(임계점)이라고 한다.

해당 임계점에 도달했을 때, 내부적으로 사이즈를 늘리는 로직이 실행된다.

임계점 계산법

Threshold = current capacity * load factor

 

EX) 언제 HashMap의 버킷 사이즈 업?

기본 생성자로 HashMap 객체를 생성했다.

default capacity = 16, default load factor = 0.75f

16 * 0.75 = 12


=> put() 메서드로 12번째 데이터를 추가할 때, 사이즈가 2배 증가한다.