
| 연산 | 앞 | 중간 | 뒤 |
|---|---|---|---|
| 추가 | ❌ O(n) | ❌ O(n) | ✅ O(1) (amortized) |
| 삭제 | ❌ O(n) | ❌ O(n) | ✅ O(1) |
| 조회 | ✅ O(1) | ✅ O(1) | ✅ O(1) |
특징
Java 예제
java
복사편집
List<Integer> list = new ArrayList<>();
list.add(10); // 뒤 추가
list.add(0, 5); // 앞 삽입
list.get(1); // 조회
list.remove(0); // 삭제
| 연산 | 앞 | 중간 | 뒤 |
|---|---|---|---|
| 추가 | ✅ O(1) | ❌ 없음 | ✅ O(1) |
| 삭제 | ✅ O(1) | ❌ 없음 | ✅ O(1) |
| 조회 | ✅ O(1) | ❌ 없음 | ✅ O(1) |
특징
Java 예제
java
복사편집
Deque<Integer> dq = new ArrayDeque<>();
dq.addFirst(10); // 앞 추가
dq.addLast(20); // 뒤 추가
dq.removeFirst(); // 앞 제거
dq.removeLast(); // 뒤 제거
| 연산 | 기준 | 시간복잡도 |
|---|---|---|
| 추가 | 루트 기준 삽입 | ✅ O(log n) |
| 삭제 | 최우선 요소 제거 | ✅ O(log n) |
| 조회 | 최우선 요소 확인 | ✅ O(1) |
특징
Java 예제
java
복사편집
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(3); pq.add(1); pq.add(5);
pq.peek(); // 최솟값 조회
pq.poll(); // 최솟값 제거
| 연산 | HashSet (해시 기반) | TreeSet (정렬 트리) |
|---|---|---|
| 추가 | ✅ O(1) avg | ✅ O(log n) |
| 삭제 | ✅ O(1) avg | ✅ O(log n) |
| 조회 | ✅ O(1) avg | ✅ O(log n) |
특징
HashSet: 빠르지만 순서 없음TreeSet: 느리지만 자동 정렬Java 예제 (HashSet)
java
복사편집
Set<Integer> set = new HashSet<>();
set.add(10);
set.contains(10);
set.remove(10);
| 연산 | HashMap (해시 기반) | TreeMap (정렬 트리) |
|---|---|---|
| 추가 | ✅ O(1) avg | ✅ O(log n) |
| 삭제 | ✅ O(1) avg | ✅ O(log n) |
| 조회 | ✅ O(1) avg | ✅ O(log n) |
특징
Java 예제 (HashMap)
java
복사편집
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.get("apple");
map.containsKey("apple");
map.remove("apple");
| 자료구조 | 잘 맞는 상황 | 피해야 할 상황 |
|---|---|---|
| ArrayList | 인덱스 기반 접근, 뒤에 삽입 | 앞/중간 삽입/삭제 자주 |
| Deque | 양쪽 삽입/삭제 필요 | 중간 삽입/삭제 |
| PriorityQueue | 최댓값/최솟값 정렬 유지 | 전체 정렬된 리스트 필요 |
| HashSet | 빠른 중복 제거, 포함 검사 | 정렬 필요할 경우 |
| HashMap | 빠른 key-based 조회 | key 정렬 순회 필요 (→ TreeMap) |