가변 배열?

Java의 ArrayList는 계속해서 element를 추가할 수 있다.

기본적으로 ArrayList는 내부적으로 array[]를 가지고 있다.
array[]의 경우 최초 길이 이상으로 element를 추가 할 수 없다. 어떻게 ArrayList는 가변적인 동작이 가능할까?

원리

ArrayList에 add() 메소드를 타고가다 보면 newCapacity() 메소드를 볼 수 있다.
newCapacity() 메소드는 array[]의 길이 늘리기 위해 새로운 길이를 반환한다.
새 길이 = 기존 길이 + (기존 길이 * 0.5)

그리고 새 길이로 array[]를 초기화 하고, 기존 배열을 복사한다.
결국, ArrayList는 내부배열을 재할당 함으로써 가변적인 길이를 갖게 되는 것이다.