ArrayList와 LinkedList 의 차이는 무엇일까요?
ArrayList는 List안에 갹 엘리먼트들이 순차적으로 저장되어져 있는 구조입니다.
따라서, ArrayList를 읽는다는 것은 붙어 있는 것들을 순차적으로 읽는 것이기에 굉장히 빠르게 읽으 수 있습니다.
반대로 LinkedList는 각 엘리먼트들이 순차적으로 저장되어져 있는 것이 아닌 상태에서 각 각의 엘리먼트들을 연결해서 저장되어져 있는 구조입니다.
따라서, LinkedList를 읽기 위해서는 각 각 연결되어져 있는 노드들을 읽어야하는 과정이 필요하기에 ArrayList에 비해서 읽는 속도가 느릴 수밖에 없습니다.
LinkedList<String> linkList = new LinkedList<>(10); -> 오류
ArrayList<String> arrayList = new ArrayList<>(10);
ArrayList는 ArrayList<>() 이 구조 속 괄호 안에 숫자를 입력하지 않으면 배열의 칸이 10칸으로 설정되어지고
숫자를 입력하면 그 숫자만큼 배열의 크기가 정해지는 반면
LinkedList는 숫자를 입력하게 되면 오류가 뜨게 됩니다. 이는, LinkedList가 초기값의 크기를 가지는 게 아니란 걸 얘기하고 이는, 각 노드들을 연결해서 만들어진 List라고 생각하면 이해가 가능합니다.
그렇다면 이러한 LinkedList의 장점은 무엇일까요?
ArrayList는 각 각의 엘리먼트들이 순차적으로 저장되어져 있다보니 읽기는 빠르지만, 만약 엘리먼트 들 중 중간에 있는 엘리먼트를 삭제하게 되면 삭제된 엘리먼트 뒤 인덱스에 저장되어져 있던 모든 엘리먼트들의 인덱스 또한 한칸씩 줄어들어야 하기에 상당한 과정이 필요하게 됩니다.
그렇다면 LinkedList는 어떨까요?
순차적으로 저장되어져 있지 않다보니 만약 본인이 원하는 엘리먼트를 지우더라도 모든 엘리먼트들이 변할 필요가 없고
그 엘리먼트 앞,뒤에 연결 되어져 있는 노드의 주소값만 변경해주면 되어 ArrayList 처럼 다수의 요소들을 변화시킬 필요가 없습니다!
따라서, 중간에 위치하는 데이터를 추가하는 삭제하는 경우가 예상된다면
ArrayList 보다는 LinkedList를 사용하는 게 더 효율적입니다
'Java' 카테고리의 다른 글
CPU 바운드 작업 vs 비동기 I/O 작업 (2) | 2024.10.02 |
---|---|
Java, Intelij,JetBrains Toolbox 다운로드 (0) | 2023.07.27 |
Java_String toString() 메소드 (0) | 2022.12.30 |