반응형
자바에서 리스트(List) 형태의 데이터를 저장할 때 가장 많이 사용하는 자료구조는 ArrayList와 LinkedList이다. 두 클래스는 List 인터페이스를 구현하지만 내부 구조와 동작 방식이 다르다. 이번 포스팅에서는 ArrayList와 LinkedList의 차이를 비교하고, 어떤 상황에서 각각을 사용하는 것이 좋은지 알아보겠다.
1. 기본 개념
ArrayList
- ArrayList는 내부적으로 배열을 사용하여 데이터를 저장한다.
- 인덱스를 이용한 데이터 접근 속도가 빠르다 (O(1)).
- 요소를 추가하거나 삭제할 때 배열을 재구성해야 하는 경우가 있어 속도가 느려질 수 있다 (O(n)).
- 메모리에서 연속된 공간을 차지하므로 캐시 효율성이 좋다.
사용 예제
List<String> arrayList = new ArrayList<>();
arrayList.add("A");
arrayList.add("B");
arrayList.add("C");
System.out.println(arrayList.get(1)); // 출력: B
LinkedList
- LinkedList는 내부적으로 이중 연결 리스트(Doubly Linked List) 구조를 사용한다.
- 요소를 추가하거나 삭제하는 속도가 빠르다 (O(1)) (단, 특정 위치를 찾는 과정은 느림 O(n)).
- 노드가 메모리 여기저기 흩어져 있어서 캐시 효율성이 낮다.
- 각 요소가 다음 요소와 이전 요소의 참조를 가지고 있어 메모리 사용량이 상대적으로 많다.
사용 예제
List<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add("B");
linkedList.add("C");
System.out.println(linkedList.get(1)); // 출력: B
2. 주요 차이점 비교
비교 항목 | ArrayList | LinkedList |
내부 구조 | 동적 배열 | 이중 연결 리스트 |
요소 접근 속도 | 빠름 (O(1)) | 느림 (O(n)) |
요소 추가/삭제 속도 | 느림 (O(n)) | 빠름 (O(1)) |
메모리 사용량 | 상대적으로 적음 | 추가적인 참조(포인터)로 인해 많음 |
순차 접근 성능 | 빠름 | 느림 |
랜덤 접근 성능 | 빠름 | 느림 |
3. 언제 사용해야 할까?
사용 상황 | 추천 컬렉션 |
데이터 조회가 빈번한 경우 | ArrayList |
데이터 추가/삭제가 빈번한 경우 | LinkedList |
요소를 인덱스로 자주 검색해야 할 때 | ArrayList |
중간 삽입/삭제가 자주 발생할 때 | LinkedList |
4. 결론
- ArrayList는 인덱스 기반으로 요소를 빠르게 조회할 수 있으며, 데이터 접근이 많은 경우에 적합하다.
- LinkedList는 요소의 추가/삭제가 빈번한 경우 유리하지만, 인덱스를 통한 조회 성능은 떨어진다.
- 일반적으로 대부분의 경우 ArrayList를 사용하며, 삽입/삭제가 많을 때 LinkedList를 고려하면 된다.
반응형
'Programming > Java' 카테고리의 다른 글
JAVA 불변 객체(Immutable Object)란 무엇이며, 어떻게 만들 수 있을까 (0) | 2025.04.15 |
---|---|
JAVA equals()와 hashCode() 오버라이딩할 때 주의할 점 (1) | 2025.04.10 |
JAVA HashMap vs Hashtable vs ConcurrentHashMap 차이점 (0) | 2025.04.10 |
JAVA 프로그램이 실행되는 흐름 (1) | 2025.04.09 |
Java를 활용한 SFTP 파일 다운로드: 가장 최근 변경된 파일 찾기 (1) | 2025.04.08 |