배열과 리스트
- 두 자료구조의 특징을 정확하게 이해하고 문제가 요구하는 조건에 따라 적절하게 선택해 사용하는 것이 중요
Array

int[] arr = new int[3];
- 연속 공간에 값이 채워져 있는 형태의 자료구조
- 고정길이로, 정해진 길이의 배열 변경 불가능
- 배열의 크기는 선언할 때 지정하고, 한 번 선언하면 수정 불가
- 인덱스를 통한 값 접근 가능
- 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어려움
ArrayList
ArrayList<Integer> arrList = new ArrayList<>();
- 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조
- 가변길이로, 객체 생성 이후에도 동적으로 배열 길이 조정이 가능
- Head포인터부터 순서대로 접근해야 함 → 접근 속도 느림
- 크기 변하기 쉬운 데이터 다룰 때 적절
- 포인터로 연결되어 있어 데이터의 삽입/삭제가 빠름
- 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡함
차이점 정리
- 크기
Array 크기 : 선언 시 할당하여 고정적
ArrayList 크기 : 크기를 동적으로 수정 가능
- 접근방식
Array : 인덱스를 통해 O(1)의 시간으로 접근 가능
ArrayList : 인덱스를 통해 O(1)의 시간으로 접근 가능
번외... LinkedList : 연결된 노드를 통해 순차적으로 접근하기 때문에 O(N)의 시간으로 접근