원희 개발로그

[자료구조론] Array vs. ArrayList 본문

자료구조론

[자료구조론] Array vs. ArrayList

이어니언 2021. 11. 17. 20:02

배열이란?

 배열은 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료 구조를 나타낸다

 

Array와 ArrayList 모두 index로 데이터를 관리하는 선형적인 구조의 자료 구조로 index를 통해 데이터에 접근할 수 있다는 공통점이 있습니다. 하지만 둘은 다른 특징을 가지고 있습니다.

 

Array는 선언 시 크기를 정해주어 크기가 변하지 않는 Fixed-sized Array 입니다. 반면, 

ArrayList는 크기가 정해져 있지 않아 데이터가 추가되면 동적으로 크기가 늘어나는 Dynamically sized Array입니다.

 

ArrayList를 살펴보면 초기 사이즈는 10으로 정해져 있고 배열의 크기에 따라 Capacity 변수가 늘어나며 배열의 크기를 동적으로 변경하게 됩니다

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    /**
     * Default initial capacity.
     */
    private static final int DEFAULT_CAPACITY = 10; // Default 값은 10으로 크기에 따라 capacity 변경

어떻게 사용할까?

Array 보다 ArrayList가 좀 더 유연하니까 ArrayList만 쓰면 되는게 아닌가? 라고 생각을 할 수 있지만 ArrayList는 Array에 비해 속도면에서 불리한 점을 가지고 있습니다.

 

ArrayList에 데이터가 추가되어 현재의 크기보다 늘려야될 때,  현재 크기의 1.5배의 크기를 가진 Array를 새로 만들어 지금 ArrayList에 담긴 값들을 복사하여 만들게 됩니다. 이 때 메모리 공간도 더 차지하게 되고 시간도 소요가 되겠죠?

따라서, 크기가 변할 필요가 없는 경우는 ArrayList를 사용하는 것보다 Array를 사용하는 것이 훨씬 더 효율적입니다.

새로운 크기의 배열을 생성 후 기존의 데이터를 복사


Array 와 ArrayList 선언 및 데이터 가져오기

Array

//선언
String[] countries = new String[5];
countries[0] = "한국";
countries[1] = "일본";
countries[2] = "중국";
countries[3] = "러시아";
countries[4] = "필리핀";

String[] countries = {"한국", "일본", "중국", "러시아", "필리핀"}; //한줄에 선언

//배열의 길이
System.out.println(countries.length); // 출력 : 5

//값 가져오기
System.out.println(countries[0]); //  출력 : "한국"

ArrayList

//선언
ArrayList<String> countries = new ArrayList<>();
countries.add("한국");
countries.add("일본");
countries.add("중국");
countries.add("러시아");
countries.add("필리핀");

ArrayList<String> countries = new ArrayList<>(Arrays.asList("한국", "일본", "중국", "러시아", "필리핀")); // 한줄에 선언

//배열의 길이
System.out.println(countries.size()); // 출력 : 5

//값 가져오기
System.out.println(countiries.get(0)); // 출력 : "한국"

 

 

 

Comments