ArrayList에 사이즈 지정없이 add를 계속할 수 있는 이유

jj J·2022년 12월 2일
1

JAVA

목록 보기
6/15

ArrayList에 사이즈 지정없이 add를 계속할 수 있는 이유 에 대해 나 스스로 정의 및 고찰해보고자 한다.

우선 ArrayList의 add 메서드 원형을 살펴보자.

해당 ArrayList가 수정된 횟수를 나타내는 modCount를 증가시켜주고 인자를 3개 받는 오버로딩된 또 다른 add 메서드를 호출한 뒤 true를 리턴하고 종료한다.

modCount는 iterator 및 listIterator 메서드에서 반환된 Iterator 및 listIterator 구현에서 사용되는데, 이 값이 예기치 않게 변경되면 다음 작업에 대한 응답으로 ConcurrentModificationException을 발생시킨다.
(for each로 Iterable한 자료구조에 대한 작업을 하는데, 중간에 Iterator의 일부를 삭제시키거나 하면 발생함)

위의 add 메서드에서 호출한 또다른 add 메서드이다.
인자로 전달받은 현재 ArrayList의 사이즈(int s, 총 용량 중 데이터가 저장된 갯수)와 elementData의 사이즈(ArrayList의 총 용량)를 비교해 같으면 꽉 찬것으로 판단, grow 메서드를 호출해, newCapacity(현재 용량보다 50% 증가된 용량)만큼의 새로운 ArrayList를 만들어 현재 ArrayList 전체를 복사하고, 현재 ArrayList의 사이즈를 인덱스로 하여 새로운 데이터를 add한다.

profile
매일 발전

0개의 댓글