기타
[개발용어] 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배 증가한다.