자바 수집 프레임워크 모델링하고 구현하는 Stack 클래스를 제공합니다. 아래 다이어그램은 Stack 클래스의 계층 구조 :

클래스는 하나를 지원합니다 기본 생성자 스택() 이는 익숙하다 빈 스택을 생성 .
선언:
public class Stack extends Vector>
구현된 모든 인터페이스:
- 직렬화 가능: 클래스가 직렬화 및 역직렬화되는 경우 클래스가 구현해야 하는 마커 인터페이스입니다.
- 복제 가능: 이는 객체를 복제할 수 있도록 클래스에서 구현해야 하는 Java의 인터페이스입니다.
- 반복 가능: 이 인터페이스는 반복 가능한 객체 컬렉션을 나타냅니다. 즉, 반복 가능하다는 의미입니다.
- 수집: 컬렉션은 해당 요소로 알려진 개체 그룹을 나타냅니다. Collection 인터페이스는 최대한의 일반성이 요구되는 객체 컬렉션을 전달하는 데 사용됩니다.
- 목록: List 인터페이스는 정렬된 컬렉션을 저장하는 방법을 제공합니다. Collection의 하위 인터페이스입니다.
- 랜덤액세스: 이는 빠른(일반적으로 일정한 시간) 임의 액세스를 지원함을 나타내기 위해 List 구현에서 사용되는 마커 인터페이스입니다.
스택을 만드는 방법?
스택을 생성하려면 다음을 가져와야 합니다. java.util.스택 이 클래스의 Stack() 생성자를 패키지하고 사용합니다. 아래 예에서는 빈 스택을 만듭니다.
스택 스택 = new Stack();
여기서 E는 객체 유형입니다.
예:
자바
// Java code for stack implementation> import> java.io.*;> import> java.util.*;> class> Test> {> >// Pushing element on the top of the stack> >static> void> stack_push(Stack stack)> >{> >for>(>int> i =>0>; i <>5>; i++)> >{> >stack.push(i);> >}> >}> > >// Popping element from the top of the stack> >static> void> stack_pop(Stack stack)> >{> >System.out.println(>'Pop Operation:'>);> >for>(>int> i =>0>; i <>5>; i++)> >{> >Integer y = (Integer) stack.pop();> >System.out.println(y);> >}> >}> >// Displaying element on the top of the stack> >static> void> stack_peek(Stack stack)> >{> >Integer element = (Integer) stack.peek();> >System.out.println(>'Element on stack top: '> + element);> >}> > >// Searching element in the stack> >static> void> stack_search(Stack stack,>int> element)> >{> >Integer pos = (Integer) stack.search(element);> >if>(pos == ->1>)> >System.out.println(>'Element not found'>);> >else> >System.out.println(>'Element is found at position: '> + pos);> >}> >public> static> void> main (String[] args)> >{> >Stack stack =>new> Stack();> >stack_push(stack);> >stack_pop(stack);> >stack_push(stack);> >stack_peek(stack);> >stack_search(stack,>2>);> >stack_search(stack,>6>);> >}> }> |
자바 목록이 비어 있음
>
>
산출:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>
Stack 클래스에서 다양한 작업 수행
1. 요소 추가: 스택에 요소를 추가하기 위해 다음을 사용할 수 있습니다. 푸시() 메서드 . 이것 푸시() 작업은 요소를 스택의 맨 위에 놓습니다.
자바
// Java program to add the> // elements in the stack> import> java.io.*;> import> java.util.*;> class> StackDemo {> > >// Main Method> >public> static> void> main(String[] args)> >{> >// Default initialization of Stack> >Stack stack1 =>new> Stack();> >// Initialization of Stack> >// using Generics> >Stack stack2 =>new> Stack();> >// pushing the elements> >stack1.push(>'4'>);> >stack1.push(>'All'>);> >stack1.push(>'Geeks'>);> >stack2.push(>'Geeks'>);> >stack2.push(>'For'>);> >stack2.push(>'Geeks'>);> >// Printing the Stack Elements> >System.out.println(stack1);> >System.out.println(stack2);> >}> }> |
>
>
산출:
[4, All, Geeks] [Geeks, For, Geeks]>
2. 요소에 접근하기: 스택의 첫 번째 요소나 스택의 맨 위에 있는 요소를 검색하거나 가져오려면 다음을 사용할 수 있습니다. 몰래 엿보다() 방법. 검색된 요소는 스택에서 삭제되거나 제거되지 않습니다.
자바
// Java program to demonstrate the accessing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use push() to add elements into the Stack> >stack.push(>'Welcome'>);> >stack.push(>'To'>);> >stack.push(>'Geeks'>);> >stack.push(>'For'>);> >stack.push(>'Geeks'>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Fetching the element at the head of the Stack> >System.out.println(>'The element at the top of the'> >+>' stack is: '> + stack.peek());> >// Displaying the Stack after the Operation> >System.out.println(>'Final Stack: '> + stack);> >}> }> |
크루스칼 알고리즘
>
>
산출:
Initial Stack: [Welcome, To, Geeks, For, Geeks] The element at the top of the stack is: Geeks Final Stack: [Welcome, To, Geeks, For, Geeks]>
3. 요소 제거: 스택에서 요소를 팝하려면 다음을 사용할 수 있습니다. 팝() 방법. 요소는 스택의 맨 위에서 팝되고 동일한 위치에서 제거됩니다.
자바
// Java program to demonstrate the removing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use add() method to add elements> >stack.push(>10>);> >stack.push(>15>);> >stack.push(>30>);> >stack.push(>20>);> >stack.push(>5>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Removing elements using pop() method> >System.out.println(>'Popped element: '> >+ stack.pop());> >System.out.println(>'Popped element: '> >+ stack.pop());> >// Displaying the Stack after pop operation> >System.out.println(>'Stack after pop operation '> >+ stack);> >}> }> |
>
>
산출:
Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]>
예
Java에서 Stack 클래스는 Vector 클래스의 하위 클래스이며 LIFO(후입선출) 객체 스택을 나타냅니다. 스택 데이터 구조를 쉽게 구현할 수 있도록 Vector 클래스를 확장합니다.
다음은 Java에서 Stack 클래스를 사용하는 방법에 대한 예입니다.
자바
import> java.util.Stack;> public> class> StackExample {> >public> static> void> main(String[] args) {> >// Create a new stack> >Stack stack =>new> Stack();> >// Push elements onto the stack> >stack.push(>1>);> >stack.push(>2>);> >stack.push(>3>);> >stack.push(>4>);> >// Pop elements from the stack> >while>(!stack.isEmpty()) {> >System.out.println(stack.pop());> >}> >}> }> |
>
>산출
4 3 2 1>
이 예에서는 먼저 java.util 패키지에서 Stack 클래스를 가져옵니다. 그런 다음 기본 생성자를 사용하여 stack이라는 새 Stack 개체를 만듭니다. push() 메서드를 사용하여 4개의 정수를 스택에 푸시합니다. 그런 다음 while 루프 내에서 pop() 메서드를 사용하여 스택에서 요소를 팝합니다. isEmpty() 메서드는 요소를 팝하기 전에 스택이 비어 있는지 확인하는 데 사용됩니다.
이 코드는 정수 스택을 생성하고 1 -> 2 -> 3 -> 4 순서로 4개의 정수를 스택에 푸시합니다. 그런 다음 pop() 메서드를 사용하여 스택에서 요소를 하나씩 팝합니다. 스택의 최상위 요소. 스택은 LIFO(후입선출) 순서를 따르므로 요소는 삽입의 역순으로 팝되어 위에 표시된 출력이 생성됩니다.
Stack 클래스는 최상위 요소를 제거하지 않고 검색하는 peek(), 스택에서 요소를 검색하여 해당 위치를 반환하는 search(), 현재 요소를 반환하는 size()와 같이 스택을 조작하기 위한 여러 가지 다른 메서드를 제공합니다. 스택의 크기. 또한 Stack 클래스는 지정된 초기 용량으로 스택을 생성하거나 기존 스택을 복사하기 위한 여러 생성자를 제공합니다.
스택 클래스의 메서드
| 방법 | 설명 |
|---|---|
| 비어 있는() | 스택 맨 위에 아무 것도 없으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다. |
| 몰래 엿보다() | 스택 맨 위에 있는 요소를 반환하지만 제거하지는 않습니다. |
| 팝() | 스택의 최상위 요소를 제거하고 반환합니다. 'EmptyStackException' 호출 스택이 비어 있을 때 pop()을 호출하면 예외가 발생합니다. |
| push(객체 요소) | 스택 맨 위에 요소를 푸시합니다. |
| 검색(객체 요소) | 스택에 객체가 존재하는지 확인합니다. 요소가 발견되면, 스택의 맨 위에서 요소의 위치를 반환합니다. 그렇지 않으면 -1을 반환합니다. |
java.util.Vector 클래스에서 상속된 메소드
| 방법 | 설명 |
|---|---|
| add(객체 객체) | 지정된 요소를 이 Vector의 끝에 추가합니다. |
| add(int index, 객체 obj) | 이 Vector의 지정된 위치에 지정된 요소를 삽입합니다. |
| addAll(컬렉션 c) | 지정된 Collection의 모든 요소를 이 Vector의 끝에 추가합니다. 지정된 컬렉션의 Iterator가 반환하는 순서대로. 문자열 자바 교체 |
| addAll(int 인덱스, 컬렉션 c) | 지정된 Collection의 모든 요소를 지정된 위치에 있는 이 Vector에 삽입합니다. |
| addElement(객체 o) | 지정된 구성요소를 이 벡터의 끝에 추가하여 크기를 1씩 늘립니다. |
| 용량() | 이 벡터의 현재 용량을 반환합니다. |
| 분명한() | 이 Vector에서 모든 요소를 제거합니다. |
| 클론() | 이 벡터의 복제본을 반환합니다. |
| 포함(객체 o) | 이 벡터에 지정된 요소가 포함되어 있으면 true를 반환합니다. |
| containAll(컬렉션 c) | 이 Vector에 지정된 Collection의 모든 요소가 포함되어 있으면 true를 반환합니다. |
| copyInto(객체 []배열) | 이 벡터의 구성 요소를 지정된 배열에 복사합니다. |
| 요소At(int 인덱스) | 지정된 인덱스에 있는 구성 요소를 반환합니다. |
| 강요() | 이 벡터의 구성요소에 대한 열거를 반환합니다. |
| verifyCapacity(int minCapacity) | 필요한 경우 이 벡터의 용량을 늘려서 최소한 최소 용량 인수로 지정된 구성 요소 수. |
| 같음() | 지정된 객체가 이 Vector와 동일한지 비교합니다. |
| 첫 번째 요소() | 이 벡터의 첫 번째 구성요소(인덱스 0에 있는 항목)를 반환합니다. |
| get(정수 인덱스) | 이 Vector의 지정된 위치에 있는 요소를 반환합니다. |
| 해시 코드() | 이 Vector의 해시 코드 값을 반환합니다. |
| indexOf(객체 o) | 이 벡터에서 지정된 요소가 처음 나타나는 인덱스 또는 -1을 반환합니다. 이 벡터에 요소가 포함되어 있지 않은 경우. |
| indexOf(객체 o, int index) | 이 벡터에서 지정된 요소가 처음으로 나타나는 인덱스를 반환하고 인덱스에서 앞으로 검색하거나 요소를 찾을 수 없으면 -1을 반환합니다. |
| insertElementAt(Object o, int index) | 지정된 개체를 지정된 인덱스에 있는 이 벡터의 구성 요소로 삽입합니다. |
| 비었다() | 이 벡터에 구성요소가 없는지 테스트합니다. |
| 반복자() | 이 목록의 요소에 대한 반복자를 적절한 순서로 반환합니다. |
| 마지막요소() | 벡터의 마지막 구성요소를 반환합니다. |
| lastIndexOf(객체 o) | 이 벡터에서 지정된 요소가 마지막으로 나타나는 인덱스 또는 -1을 반환합니다. 이 벡터에 요소가 포함되어 있지 않은 경우. |
| lastIndexOf(Object o, int index) | 이 벡터에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환합니다. 인덱스에서 뒤로 검색하거나 요소를 찾을 수 없으면 -1을 반환합니다. |
| 목록반복자() | 이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다. |
| listIterator(int 인덱스) | 이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다. 목록의 지정된 위치에서 시작합니다. |
| 제거(int 인덱스) | 이 Vector의 지정된 위치에 있는 요소를 제거합니다. |
| 제거(객체 o) | 이 Vector에서 지정된 요소의 첫 번째 항목을 제거합니다. Vector에 요소가 포함되어 있지 않으면 변경되지 않습니다. |
| RemoveAll(컬렉션 c) | 지정된 Collection에 포함된 모든 요소를 이 Vector에서 제거합니다. |
| 제거모든요소() | 이 벡터에서 모든 구성 요소를 제거하고 크기를 0으로 설정합니다. |
| RemoveElement(객체 o) | 이 벡터에서 인수의 첫 번째(인덱스가 가장 낮은) 항목을 제거합니다. |
| RemoveElementAt(int 인덱스) | 지정된 인덱스의 구성 요소를 삭제합니다. |
| RemoveRange(int fromIndex, int toIndex) | 이 목록에서 인덱스가 fromIndex(포함)와 toIndex(제외) 사이에 있는 모든 요소를 제거합니다. |
| keepAll(컬렉션 c) | 지정된 Collection에 포함된 이 Vector의 요소만 유지합니다. |
| set(int 인덱스, 객체 o) | 이 Vector의 지정된 위치에 있는 요소를 지정된 요소로 바꿉니다. |
| setElementAt(Object o, int index) | 이 벡터의 지정된 인덱스에 있는 구성요소를 지정된 객체로 설정합니다. |
| setSize(int newSize) | 이 벡터의 크기를 설정합니다. |
| 크기() | 이 벡터의 구성요소 수를 반환합니다. |
| subList(int fromIndex, int toIndex) | fromIndex(포함)와 toIndex(제외) 사이의 이 목록 부분에 대한 뷰를 반환합니다. |
| toArray() | 이 Vector의 모든 요소를 올바른 순서로 포함하는 배열을 반환합니다. |
| toArray(객체 []배열) | 이 Vector의 모든 요소를 올바른 순서로 포함하는 배열을 반환합니다. 런타임 반환된 배열의 유형은 지정된 배열의 유형입니다. |
| toString() | 각 요소의 문자열 표현을 포함하는 이 Vector의 문자열 표현을 반환합니다. |
| 트림투사이즈() | 이 벡터의 용량을 벡터의 현재 크기로 자릅니다. |
우선적으로 사용 무엇에 대해서 스택 오버 -:
Java의 Stack 클래스는 레거시 클래스이며 다음을 상속합니다. 자바의 벡터 . 스레드로부터 안전한 클래스이므로 스레드로부터 안전이 필요하지 않을 때 오버헤드가 발생합니다. 사용하는 것이 좋습니다 ArrayDeque 단일 스레드 환경에서 더 효율적이기 때문에 스택 구현에 적합합니다.
자바
// A Java Program to show implementation> // of Stack using ArrayDeque> import> java.util.*;> class> GFG {> >public> static> void> main (String[] args) {> >Deque stack =>new> ArrayDeque();> >stack.push(>'A'>);> >stack.push(>'B'>);> >System.out.println(stack.peek());> >System.out.println(stack.pop());> >}> }> |
>
>
산출:
B B>
스택보다 Deque를 사용하는 또 다른 이유는 Deque에는 스택이 적용되지 않는 동안 LIFO 개념이 적용된 상태를 유지하면서 목록으로 변환된 스트림을 사용할 수 있는 기능이 있기 때문입니다.
리눅스 무료 ipconfig
자바
import> java.util.*;> import> java.util.stream.Collectors;> class> GFG {> >public> static> void> main (String[] args) {> > >Stack stack =>new> Stack();> >Deque deque =>new> ArrayDeque();> >stack.push(>1>);>//1 is the top> >deque.push(>1>);>//1 is the top> >stack.push(>2>);>//2 is the top> >deque.push(>2>);>//2 is the top> >List list1 = stack.stream().collect(Collectors.toList());>//[1,2]> >System.out.println(>'Using Stack -'>);> >for>(>int> i =>0>; i System.out.print(list1.get(i) + ' ' ); } System.out.println(); List list2 = deque.stream().collect(Collectors.toList());//[2,1] System.out.println('Using Deque -'); for(int i = 0; i System.out.print(list2.get(i) + ' ' ); } System.out.println(); } }> |
>
>산출
Using Stack - 1 2 Using Deque - 2 1>