ArrayList는 기본적으로 배열을 사용한다. 하지만 일반 배열과 차이점이 존재한다.
일반 배열은 처음에 메모리를 할당할 때 크기를 지정해주어야 하지만,
ArrayList는 크기를 지정하지 않고 동적으로 값을 삽입하고 삭제할 수 있다.
LinkedList는 내부적으로 양방향의 연결 리스트로 구성되어 있어 참조하려는 원소에 따라 처음부터 정방향 또는 역순으로 순회 가능
ArrayList는 각 데이터의 index를 가지고 있고 무작위 접근이 가능 , 특정 index에 한번에 접근이 가능 하지만 LinkedList는 양방향의 연결 리스트로 구성되어있기 때문에 특정 index에 한번에 접근하는 것이 불가능함 그렇기 때문에 데이터를 조회할 때 ArrayList와 LinkedList는 데이터량이 많아질수록 LinkedList가 더 느릴수 밖에 없음
*데이터 삽입과 삭제
ArrayList는 각 데이터를 삭제하거나 추가하면 나머지 데이터들의 위치를 이동시켜야한다.
하지만 LinkedList는 연결 리스트로 구성되어 있기 때문에 데이터를 삽입 삭제 한후 앞뒤의 데이터의 링크만 변경해주면 되기 때문에 ArrayList처럼 많은 데이터를 이동시킬 필요가 없다.
ArrayList는 데이터 조회가 많은 정적인 데이터 사용에 적합하고
LinkedList는 지속적인 변화가 많은 동적인 데이터 사용에 적합하다.
*정적인 데이터와 동적인 데이터
정적 데이터 (속성) 정의
일반적으로 HTML이나 이미지, js, css파일 등을 말한다. 스프링부트 프로젝트를 사용해본 사람들이라면 익히 알고 있을 'static' 폴더에 들어있는 자료들을 처리하는 역할을 하는 서버가 웹 서버라고 생각하면 될 것이다.
동적 데이터(Dynamic Data)
정적인 데이터가 아닌, 입력받은 값을 내부적인 로직에 따라 처리해 만들어낸 결과값을 의미한다. 기존의 웹 서버로는 해낼 수 없는 역할이다.