결론부터 말하면 스택을 구현하기 위한 클래스로는
Deque > LinkedList > Stack (권장 X) 순으로 좋다!
1. Deque<Integer> stack = new ArrayDeque<>();
- 클래스: java.util.ArrayDeque
- 상속 구조: Deque 구현체
- 특징:
- 배열 기반이지만 자동으로 크기 조절됨
- push(), pop(), peek() 사용 가능 (Deque 인터페이스)
- null 저장 불가
- Stack보다 훨씬 빠름 (동기화 X, 최신 컬렉션 구조)
- 권장 여부: ✅ 최고의 선택 (성능, 설계 모두 우수)
2. LinkedList<Integer> stack = new LinkedList<>();
- 클래스: java.util.LinkedList
- 상속 구조: Deque 구현체
- 특징:
- addFirst(), removeFirst(), peekFirst()를 이용해 스택처럼 사용 가능
- 이중 연결 리스트 구조 → 삽입/삭제에 강점
- 메모리 사용이 많을 수 있음 (노드마다 포인터 포함)
- 장점: 유연하고 다양한 작업에 적합
- 권장 여부: ⚠️ 가능하지만, 단순한 스택 작업에는 ArrayDeque가 더 적합
3. Stack<Integer> stack = new Stack<>();
- 클래스: java.util.Stack
- 상속 구조: Vector를 상속 (Vector는 동기화된 List)
- 특징:
- 오래된 클래스 (Java 1.0부터 존재)
- push(), pop(), peek() 제공
- 동기화(synchronized)가 되어 있어 멀티스레드 환경에서 안전하지만, 단일 스레드에서는 느릴 수 있음.
- 권장 여부: ❌ 요즘은 사용 권장되지 않음. (성능, 설계 측면에서 더 나은 대안 존재
자료구조 | 장점 | 단점 | 현재 사용 권장 여부 |
Deque | 빠르고 효율적 | null 저장 불가 | 적극 권장 |
LinkedList | 유연성, 다양한 기능 | 메모리 많이 씀 | 상항에 따라 |
Stack | 직관적인 API | 오래됨, 느림 | 비권장 |
728x90
'Java' 카테고리의 다른 글
[Java] Map.Entry<K, V> / Map의 key, value 접근법 (0) | 2025.05.01 |
---|---|
[Java] LinkedHashMap과 HashMap의 차이 (0) | 2025.05.01 |
[Java] 컬렉션(collection) (컨테이너(container)) (0) | 2025.04.29 |
[Java] Comparator, CompareTo, thenComparing (0) | 2025.04.28 |
[Java] DFS (0) | 2025.04.26 |