코딩을 하다가 왜 배열을 사용하지 않고 ArrayList를 사용하는지 궁금증이 생겼고 인터넷에 검색을 해 보았다.
사용하는데 가장 큰 이유는 동적배열로 만들 수 있다는 점이였다.
자바에서 배열은 int[] arr = new int[10]; 등으로 정적배열 밖에 선언이 되지 않는다.
그렇기 때문에 배열의 크기를 동적으로 할당하고 싶을 때 Arraylist를 사용하면 된다.
ArrayList의 사용 원리는 다른 블로그에서 찾아 보았다.
ArrayList 사용원리
ArrayList 의 원문소스를 들여다보면 데이터를 저장하는 공간으로 다음과 같은 배열을 사용한다.
private transient E[] elementData;
그냥 단순한 배열을 사용한다는 것을 알 수 있다. ArrayList의 Method 중에서 add(Object o)라는 살펴보면
다음과 같은 원리로 동적배열을 제공하고 있다.
Object oldData[] = elementData;
elementData = (E[])new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
add() 함수에서 보면 자바에서는 동적인 배열을 처리하기위해 새로운 배열을 생성하여 arraycopy를 통하여
기존의 데이터를 새로운 배열에 저장하여 배열의 크기가 동적으로 변경된 것처럼 보여지도록 하고있다.
그리고 한가지 더 설명하자면 배열이 동적으로 크기가 변할때마다 새로운 배열을 생성하는 작업이 발생하는 것을
방지하기 위해 임의로 사용자가 사용하고 있는 배열보다 더 큰 크기의 배열을 생성하여 버퍼공간을 가지도록
새로운 배열을 생성하여 사용한다.
출처: http://devhome.tistory.com/16 [미주엘의 개발이야기]
'개인 공부 > 자바' 카테고리의 다른 글
모든 경우의 수 (백 트래킹) (0) | 2018.02.08 |
---|---|
int vs Integer (Wrapper 클래스) (1) | 2018.01.17 |
인터프리터 vs 컴파일러 (0) | 2018.01.17 |
for each (자바) - for문을 통한 배열 간단히 출력하기 (0) | 2018.01.10 |
모든 경우의 수 (비트 연산) (0) | 2018.01.08 |