IT/JAVA

ArrayList vs LinkedList

iamhyeon 2025. 4. 8. 18:26

|  컬렉션 프레임워크

- 자바에서 데이터를 구조적으로 저장하고 관리학 위한 인터페이스 + 클래스 모음

- 인터페이스로 기능을 정의하고  =>  클래스에서 구체적으로 구현한다

 

 

|  핵심 인터페이스 구조

Map은 Collection을 상속하지 않는다

 


|  주요 인터페이스 + 대표 구현 클래스

 

✅ List (순서 O, 중복 O)

구현체 특징
ArrayList 배열 기반, 인덱스 접근 빠름
LinkedList 노드 기반, 삽입/삭제 빠름
Vector ArrayList와 유사하지만 동기화됨
Stack Vector 상속, LIFO 구조

 

✅ Set (순서 X, 중복 X)

구현체 특징
HashSet 순서 없음, 빠름
LinkedHashSet 입력 순서 유지
TreeSet 자동 정렬 (Comparable or Comparator)

 

✅ Queue / Deque

구현체 특징
LinkedList List + Queue + Deque 모두 구현
PriorityQueue 우선순위 큐
ArrayDeque 양방향 큐 (Deque), 스택/큐 모두 사용 가능

 

✅ Map (Key-Value 쌍, 중복 Key X)

구현체 특징
HashMap 가장 일반적인 Map
LinkedHashMap 입력 순서 유지
TreeMap Key 기준 정렬
Hashtable HashMap의 동기화 버전
ConcurrentHashMap 멀티스레드 환경에서 안전

 

✏️  ArrayList vs LinkedList

  ArrayList LinkedList
내부 구조 배열 기반 노드 기반 (연결 리스트)
장점 - 인덱스 접근 빠름
- 메모리 덜 씀
- 앞/중간 삽입·삭제 빠름 
단점 - 중간 삽입·삭제 느림
(뒤 요소를 전부 한 칸씩 밀어야 함)
- 인덱스 접근 느림 (처음부터 순회해야 함)
사용 시기 - 조회가 많을 때
- 리스트 크기가 자주 변하지 않을 때
- 삽입/삭제가 많을 때
- 데이터 크기 예측 어려울 때

 

 

예)  배열처럼 다루는 경우 => ArrayList

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(1));

인덱스로 바로 접근해야 하니까 ArrayList가 빠르다

 

 

예)  데이터가 계속 앞에 추가되는 경우 => LinkedList

List<String> log = new LinkedList<>();
log.add(0, "최근로그1");
log.add(0, "최근로그2");

 

 

예)  큐를 사용할 때 => LinkedList

Queue<String> queue = new LinkedList<>();
queue.add("A");
queue.poll();

큐는 앞에서 꺼내고 뒤에 넣는 구조라 LinkedList가 유리하다

 

 

인덱스로 자주 접근  =>  ArrayList

앞/중간에 자주 추가/삭제  =>  LinkedList

큐나 덱처럼 쓰고 싶다  =>  LinkedList

요소 수가 거의 고정  =>  ArrayList

읽기만 하고 거의 안 바뀐다  =>  ArrayList

 

 

 

'IT > JAVA' 카테고리의 다른 글

Java String 클래스  (0) 2025.04.15
JMH (JMH 라이브러리를 활용한 Java 코드 성능테스트)  (2) 2025.04.11
코드 실행시간 비교  (0) 2025.03.26
HashSet  (0) 2025.03.20
Pattern, Matcher Class  (0) 2025.02.25