Array란 같은 성질(같은 타입)을 갖는 항목들의 집합으로, 같은 특성을 갖는 원소들이 순서대로 구성된 선형 자료 구조(원소들을 순서대로 나열한 집합)이다.
배열은 고정된 크기를 가진다.
그러므로 공간 크기가 부족하면 에러가 발생하기에, 공간을 할당할 때, 넉넉한 크기로 할당한다.(메모리 낭비)
고정된 크기이기에 공간을 늘리거나 줄일 수 없다.
삽입과 삭제의 경우에는 O(N)의 시간 복잡도를 갖는다.
원소에 접근할 때는 O(1)의 시간 복잡도를 갖는다.
데이터를 추가하고 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야한다.
배열은 인덱스를 가지고 있기 때문에 값(데이터)에 바로 접근이 가능하다.(검색 성능이 좋다)
연속된 메모리 공간에 존재하기 때문에 관리가 수월하다는 점이 있다.
배열의 단점은 삽입과 삭제가 어렵고, 크기가 가변이 아니라는 점이다.
배열에서 데이터의 삽입과 삭제는 해당 위치에서 작업 이후, 해당 원소 뒤의 모든 원소들에서 이동이 이루어지기 때문에 시간이 오래 걸린다.
배열은 처음 생성할 때 그 크기를 선언하기 때문에 크기의 가변이 어렵다
리스트는 여러 개의 데이터를 저장할 수 있는 자료형으로써, 배열과 비슷하게 인덱스를 사용하여 데이터에 접근할 수 있지만, 배열과 달리 크기가 가변적이므로 데이터의 추가 삭제가 용이하다.
또한 중복 저장이 가능하다.
리스트는 인터페이스로 정의되어 있고, ArrayList, LinkedList, Vector등 다양하다.
삽입 삭제가 배열에 비해 쉽다.
메모리 공간의 크기를 변경할 수 있다.
메모리 사용이 편리하다.
메모리 관리가 편리하다.
배열의 크기는 고정되어 있지만, 리스트는 사이즈가 가변적이다.
배열은 원시타입과 오브젝트 모두를 담을 수 있지만, 리스트는 오브젝트만 담을 수 있다.
배열은 제네릭을 사용할 수 없지만, 리스트는 타입 안정성을 보장해주는 제네릭을 사용할 수 있다.
길이에 대해 배열은 length를 쓰고, 리스트는 size()메서드를 사용한다.
배열은 element들을 할당하기 위해, assignment 연산자를 쓰지만, 리스트는 add() 메서드를 통해 element를 삽입한다.
출처
https://jeonyoungho.github.io/posts/Array%EC%99%80List(%EA%B7%B8%EB%A6%AC%EA%B3%A0-Java-List)/
https://bigsong.tistory.com/31
https://velog.io/@seongwon97/Java-Array%EC%99%80-List-%EB%B9%84%EA%B5%90