스택은 Stack 대신 ArrayDeque로
조회 1 · 댓글 0
알고리즘 풀이나 코드에서 LIFO 스택이 필요할 때 습관적으로 java.util.Stack을 쓰기 쉽습니다. 하지만 Java 공식 문서는 Deque 인터페이스를 두고 "이 인터페이스를 레거시 Stack 클래스보다 우선해서 써야 한다(should be used in preference to the legacy Stack class)"고 명시합니다. 구현체로는 ArrayDeque가 무난한데, 문서에도 "스택으로 쓸 때 Stack보다 빠를 가능성이 높다"고 적혀 있습니다.
스택 연산은 push, pop, peek 세 개면 됩니다. 각각 addFirst, removeFirst, peekFirst와 동일하게 동작하고, 덱의 앞쪽에서 넣고 뺍니다.
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); // addFirst
stack.push(2);
int top = stack.peek(); // 2, 제거 안 함
int v = stack.pop(); // 2, 제거 후 반환
주의할 점 하나. ArrayDeque는 null 원소를 허용하지 않습니다. null을 push하면 NullPointerException이 납니다. 빈 스택에서 peek()은 null을 반환하므로, null을 값으로 넣던 코드라면 빈 상태와 구분되지 않아 그대로 옮기면 안 됩니다.
🔗 https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Deque.html
🔗 https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/ArrayDeque.html
로그인 후 답글을 남길 수 있습니다.