Programming Language/JAVA

[JAVA] Stack

DEV_HEO 2023. 2. 16. 17:23
320x100

Stack 사용

그냥 짝맞는거 찾아서 하나하나 제거하는 식으로 풀었었는데

정확성은 100%이지만 효율성에서 다 틀렸다.

찾아보니 Stack으로 푸는 방법이 있다해서 알게 되었다.

 

다행히 학교다닐 때 배운 개념과 코드가 거의 유사해서 이해하는데는 어려움이 없었다.

 

선입선출(FIFO)

데이터 추가 : push

데이터 꺼내기 : pop (제일 나중에 추가한 것부터 꺼냄)


코드

Stack<String> stack = new Stack<>();

// Stack에 데이터 추가
stack.push("A");
stack.push("B");
stack.push("C");

// Stack에서 데이터 꺼내기
System.out.println(stack.pop());
// ==> C

// Stack의 최상단 값 출력(제거하지 않음)
System.out.println(stack.peek());
// ==> B

// Stack에서 데이터 꺼내기
System.out.println(stack.pop());
// ==> B

System.out.println(stack.pop());
// ==> A

stack.pop();
// ==> EmptyStackException

 

A, B, C를 push하고

두번 pop한 결과

Stack에는 A만 남아있다.

 

여기서 pop()을 두 번 실행하면, 즉 Stack을 비운 상태에서 또 pop()을 실행하면

 EmptyStackException 예외가 발생한다.


  • List 처럼 한 가지 자료형의 데이터만 추가할 수 있다.
  • push() : 데이터 추가
  • pop() : 데이터 추출
  • peek() : 제일 상단 데이터 리턴( 실제 데이터가 추출되진 않는다.)
  • size() : Stack 사이즈 리턴
  • empty() : Stack이 빈 상태인지 알 수 있음
  • contains() : 특정 데이터가 포함되어 있는지 알 수 있음
  • clear() : Stack 비우기
320x100