사전적으로 Stack은 '쌓다', '더미'라는 의미를 가지고 있고, 사전적인 의미에서 알 수 있듯이 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조이다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 LIFO(Last In First Out)의 형태를 띈다는 것이다.
Stack의 특징
Stack 선언
import java.util.stack;
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
Stack<Character> stack = new Stack<>(); // char형 스택 선언
Stack을 선언하려면 객체의 타입을 파라미터로 주며 위와 같이 선언하면 된다.
Stack 값 추가
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);
System.out.println(stack); // 출력 결과 [3, 1, 5, 6]
Stack에 값을 추가하기 위해서는 push(value) 메소드를 사용한다.
add() 메서드를 통해서도 Stack에 값을 추가할 수 있다.
두 메서드의 차이점은 push() 메서드는 Stack 클래스에서 제공하며 추가한 객체를 리턴하고, add() 메서드는 List 클래스에서 제공한하며 추가 성공 여부(boolean)를 리턴한다는 것이다. 큰 차이점은 없지만 Stack을 사용했다는 것을 명확하게 알기 위해 push()를 사용하는 것이 좋다.
Stack 값 삭제
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);
stack.pop(); // 가장 위에 있는(최근에 들어간) 객체릘 꺼낸다.
System.out.println(stack); // 출력 결과 : [3, 1, 5]
stack.clear();
System.out.println(stack); // 출력 결과 : []
Stack에서 값을 하나 제거하기 위해서는 pop() 메소드를 사용한다. Stack에서 가장 위에 있는(마지막에 추가한) 값인 6이 pop() 메소드를 사용함으로써 제거된다. 위에서 설명한 Stack의 가장 큰 특징인 LIFO 구조를 확인할 수 있다. 모든 값을 제거하기 위해서는 clear() 메소드를 사용한다.
pop() 메소드는 가장 위에 있는 값을 제거하면서, 제거한 값을 리턴한다.
Stack의 가장 상단의 값
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);
System.out.println(stack.peek()); // 출력 결과 : 6
Stack의 가장 상단의 값을 확인하기 위해서는 peek() 메소드를 사용한다. 반환값으로 Stack 최상단의 값, 즉 가장 먼저 꺼내지게 될 값을 가진다. pop() 메소드 또한 같은 리턴값을 가지지만 pop() 메소드는 값을 제거하고, peek() 메소드는 값을 제거하지 않는다(확인만 함)는 차이가 있다.
Stack 기타 메서드
Stack<Integer> stack = new Stack<>(); // int형 스택 선언
Stack<Integer> stack2 = new Stack<>();
stack.push(3);
stack.push(1);
stack.push(5);
stack.push(6);
System.out.println(stack.size()); // 출력 결과 : 4
System.out.println(stack.isEmpty()); // 출력 결과 : false
System.out.println(stack2.isEmpty()); // 출력 결과 : true
System.out.println(stack.contains(5)); // 출력 결과 : true
https://coding-factory.tistory.com/601
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rorean&logNo=221620781986