Java의 스택 은 큐, 배열, 연결 목록 또는 트리와 매우 유사한 데이터 구조입니다. 다른 것들과 다른 점은 Java Stack이 LIFO(Last In, First Out) 원칙을 기반으로 한다는 것입니다. 이것이 의미하는 바는 두 명령을 사용하여 스택에서 요소를 추가하고 제거할 때 가장 먼저 제거한 것이 항상 마지막으로 추가한 것이 된다는 것입니다. Java 스택 클래스를 자세히 살펴보겠습니다.
Java 스택 클래스 탐색
Java 스택 클래스는 Vector 클래스 의 확장이며 , 자체적으로 List 클래스를 확장합니다. 벡터는 변경 가능하고 내부 요소의 요구에 따라 확장 및 축소될 수 있기 때문에 Stack 은 요구에 따라 크기를 변경할 수도 있습니다. Vector 클래스 의 확장은 Vector를 Stack 으로 변환하는 다섯 가지 작업을 추가합니다 . 이 다섯 가지 작업은 다음과 같습니다.- .push(E item) – 요소를 스택 맨 위에 배치
- .pop() – 스택의 맨 위에 있는 요소를 제거하고 함수의 값으로 반환합니다.
- .peek() – 스택의 맨 위에 있는 요소를 제거하지 않고 봅니다.
- .empty() – 스택이 비어 있는지 여부를 테스트하는 부울 함수. 0 또는 1을 반환합니다.
- .search(Object o) – o를 찾고 위치를 반환합니다. 값은 0부터 시작하지 않고 1부터 시작합니다.
Java 스택 예제 코딩
Stack 에 대한 기능을 알았으니 이제 Java 스택 예제를 코딩해 보겠습니다. Stack 은 임시로 저장하고 빠르게 검색해야 하는 데이터를 처리하는 데 매우 유용합니다. 스택은 LIFO이기 때문에 트리 데이터 구조를 탐색할 때 노드 순회에 매우 유용합니다. 모든 것을 시작하기 전에 기본 스택을 생성해 보겠습니다. 스택을 구현하는 코드는 다음과 같습니다.
import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
이것이 빈 Stack 을 생성하기 위해 해야 할 전부입니다 . 다음을 사용하여 데이터 유형을 선언하지 않고 간단하게 선언할 수도 있습니다.
Stack example = new Stack();
Stack 은 변경 가능 하기 때문에 스택에 요소를 푸시하면 자동으로 크기가 조정됩니다. 이제 스택 기능을 사용하는 방법을 살펴보겠습니다 .
자바 스택 구현
앞에서 간략하게 살펴본 다섯 가지 방법을 어떻게 활용하는지 살펴보자. Java 스택 구현은 플레이트 스택으로 생각하면 기억하기 쉽습니다. 스택에 접시를 놓지만 접시를 얻으려면 바닥으로 가지 않고 위에서 접시를 가져옵니다. 마지막으로 입는 것이 첫 번째로 벗는 것입니다. 이전 예제를 stackExample 로 확장하면 함수는 다음과 같습니다.푸시
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
이 시점에서 우리는 매번 이 두 정수를 Java 스택 예제에 푸시한 것처럼 다른 함수를 표시할 것입니다.
팝
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
산출:
10
5
비었다
이제 스택 에서 모든 요소를 제거하려고 하지만 얼마나 많은 요소가 있는지 확실하지 않다고 가정해 보겠습니다. Boolean.isEmpty() 함수를 전제 조건 while 루프와 결합하여 Stack 에서 모든 요소를 팝할 수 있습니다 . 이 자바 스택 구현이 어떻게 수행되는지 살펴보십시오.
while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
산출
10
5
몰래 엿보다
Java에서 스택 구현으로 .peek()를 사용하여 스택 을 제거하지 않고 스택 의 다음 항목을 살펴볼 수 있습니다.
System.out.println(stackExample.peek());
산출
10
스택을 팝하고 인쇄하면 10이 여전히 스택에 있기 때문에 10과 5를 반환합니다. 우리는 단지 그것을 보았을 뿐, 팝 기능으로 그것을 제거하지 않았습니다. peek 함수는 Java에서 Stack 을 위한 훌륭한 도구입니다.
찾다
특정 요소를 찾으려는 경우 Java의 스택 구현은 .search(e)를 사용합니다. 그것을 찾기 위해.
System.out.println(stackExample.search(5));
산출
2
이는 Stack 의 맨 위에서부터 세고 Java Stack 은 Array 처럼 0이 아니라 1부터 시작하기 때문임을 기억하세요 . 그래서 스택을 보면 (10) --> (5)이고 5가 2번 자리에 있다. 스택 에 없는 요소를 찾으려고 하면 -1이 출력됩니다.
반복
컬렉션으로 작업할 때 여러 요소를 찾아야 하는 경우가 있습니다. 복잡성을 줄이고 스택 을 여러 번 검색해야 하는 경우 반복을 사용할 수 있습니다. Java의 Stack은 List 클래스를 확장하기 때문에 반복을 위한 몇 가지 옵션이 있습니다. 가장 쉬운 방법 중 하나는 ListIterator 함수를 사용하는 것입니다. ListIterator는 .hasPrevious() 또는 .hasNext()를 사용하여 스택을 위에서 아래로 또는 아래에서 위로 이동할 수 있다는 점에서 좋습니다 . 다음과 같이 표시됩니다.
ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
산출
10
5
Java에서 Stack s를 통해 반복할 때 요소를 제거하지 않는다는 점을 명심하십시오 . 반복하면 본질적으로 스택의 모든 요소를 순서대로 엿볼 수 있습니다. 이렇게 하면 특정 요소가 있는 위치를 찾은 다음 이를 통해 조작할 수 있습니다. 필요한 경우 계산, 삭제 또는 변경할 수도 있습니다.
GO TO FULL VERSION