728x90
ArrayList와 LinkedList의 차이점
1. 내부 데이터 구조
- ArrayList
- 내부적으로 배열(Array)을 사용하여 요소를 지정
- 배열의 크기를 동적으로 조정할 수 있으며, 인덱스를 기반으로 빠른 임의 접근이 가능함
- LinkedList
- 내부적으로 연결 리스트를 사용하여 요소를 저장
- 각 요소는 자신의 데이터와 다음 요소를 가리키는 링크로 구성
- 임의 접근에는 비효율적이지만, 요소의 삽입과 삭제가 빠르게 이루어짐
2. 데이터 접근
- ArrayList
- 인덱스를 사용하여 요소에 접근할 수 있으므로 임의 접근이 빠름
- 인덱스 기반의조회 및 변경이 빠르게 이루어짐
- LinkedList
- 연결 리스트의 특성상 요소를 순차적으로 탐색해야 하므로, 임의 접근이 느림
- 요소의 삽입과 삭제는 포인터 조작만으로 이루어지므로 상대적으로 빠름
3.삽입 및 삭제
- ArrayList
- 요소의 삽입과 삭제가 발생할 때, 해당 위치의 요소들을 이동시켜야 하므로 비교적 느림
- LinkedList
- 요소의 삽입 삭제가 링크를 재조정하는 작업만으로 이루어지므로, ArrayList 에 비해 상대적으로 빠름
4. 메모리 사용
- ArrayList
- 요소를 연속적인 메모리 블록에 저장하므로, 메모리 사용이 효율적임
- LinkedList
- 각 요소는 독립적으로 메모리에 저장되고 링크로 연결되므로, 추자적인 메모리 오버헤드가 발생할 수 있음
요약
ArrayList는 임의 접근과 요소의 변경이 빈번한 경우에 유리하며,
LinkedList는 요소의 삽입과 삭제가 빈번한 경우에 유리함
Array 에서 List 로 전환하려면?
1. 변경 불가능한 리스트로 변환
-> array 배열을 List 로 변환하고, 변환된 List를 list 변수에 할당
// 배열 생성
String[] array = {"Apple", "Banana", "Orange"};
// 배열을 List로 전환
List<String> list = Arrays.asList(array);
Array.asList() 메서드가 반환하는 List 는 고정 크기의 리스트이며, 원본 배열의 변경이 리스트에 반영된다
따라서 리스트에 원소를 추가하거나 삭제할 수 없다.
2. 변경 가능한 리스트로 변환
-> ArrayList 의 생성자를 사용하여 Arrays.asList() 의 반환 값을 새로운 ArrayList 인스턴스로 복사
// 배열 생성
String[] array = {"Apple", "Banana", "Orange"};
// 배열을 List로 변환하여 변경 가능한 리스트로 복사
List<String> list = new ArrayList<>(Arrays.asList(array));
이렇게하면 변경 가능한 리스트가 생성되며, 원본 배열의 변경은 영향을 주지 않는다.
728x90
'2.Container' 카테고리의 다른 글
Queue에서, poll()과 remove()의 차이 (0) | 2023.07.19 |
---|---|
ArrayList 와 Vector 의 차이점 / Array와 ArrayList의 차이점 (0) | 2023.07.18 |
HashMap vs Hashtable / HashMap vs TreeMap / HashSet (0) | 2023.07.13 |
Collection과 Collections의 차이는? / List, Set, Map의 차이점 (0) | 2023.07.12 |
자바 컨테이너란 ? (0) | 2023.07.12 |