Java Рамка колекції надає клас Stack, який моделює та реалізує a Наведена нижче схема показує ієрархія класу Stack :

Клас підтримує одного конструктор за замовчуванням стек() який звик створити порожній стек .
Декларація:
public class Stack extends Vector>
Усі реалізовані інтерфейси:
- Серіалізований: Це маркерний інтерфейс, який повинні реалізувати класи, якщо вони мають бути серіалізовані та десеріалізовані.
- Можливість клонування: Це інтерфейс у Java, який має бути реалізований класом, щоб дозволити клонувати його об’єкти.
- Повторювані: Цей інтерфейс представляє колекцію об’єктів, які можна ітерувати, тобто які можна ітерувати.
- Колекція: Колекція представляє групу об’єктів, відомих як її елементи. Інтерфейс колекції використовується для передачі колекцій об’єктів, де потрібна максимальна загальність.
- Список: Інтерфейс List забезпечує спосіб зберігання впорядкованої колекції. Це дочірній інтерфейс Collection.
- Випадковий доступ: Це інтерфейс маркера, який використовується реалізаціями List, щоб вказати, що вони підтримують швидкий (зазвичай постійний час) випадковий доступ.
Як створити стек?
Щоб створити стек, ми повинні імпортувати java.util.stack пакуйте та використовуйте конструктор Stack() цього класу. Наведений нижче приклад створює порожній стек.
Стек стек = новий стек();
Тут E – тип об’єкта.
приклад:
Java
// 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>);> >}> }> |
швидкість передачі в arduino
>
>
Вихід:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>
Виконання різних операцій над класом Stack
1. Додавання елементів: Щоб додати елемент до стеку, ми можемо використовувати метод push(). . Це push() розмістити елемент у верхній частині стека.
Java
// 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. Доступ до елемента: Щоб отримати або вибрати перший елемент стека або елемент, присутній у верхній частині стека, ми можемо використовувати peek() метод. Отриманий елемент не видаляється чи вилучається зі стеку.
Java
// 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
// 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, щоб забезпечити легку реалізацію структури даних стека.
Ось приклад того, як можна використовувати клас Stack у Java:
Java
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>
У цьому прикладі ми спочатку імпортуємо клас Stack з пакета java.util. Потім ми створюємо новий об’єкт Stack під назвою stack, використовуючи конструктор за замовчуванням. Ми поміщаємо чотири цілі числа в стек за допомогою методу push(). Потім ми витягуємо елементи зі стеку за допомогою методу pop() усередині циклу while. Метод isEmpty() використовується, щоб перевірити, чи стек порожній перед спробою витягти елемент.
instanceof в java
Цей код створює стек цілих чисел і поміщає в стек 4 цілі числа в порядку 1 -> 2 -> 3 -> 4. Потім ми витягуємо елементи зі стеку один за одним за допомогою методу pop(), який видаляє та повертає верхній елемент стека. Оскільки стек дотримується порядку «останній прийшов – першим вийшов» (LIFO), елементи витягуються в порядку, зворотному вставці, що призводить до результату, показаного вище.
Клас Stack надає кілька інших методів для маніпулювання стеком, наприклад peek() для отримання верхнього елемента без його видалення, search() для пошуку елемента в стеку та повернення його позиції та size() для повернення поточного розмір стопки. Клас Stack також надає кілька конструкторів для створення стека із заданою початковою ємністю або шляхом копіювання існуючого стека.
Методи в класі стека
| МЕТОД | ОПИС |
|---|---|
| порожній() | Він повертає істину, якщо на вершині стека нічого немає. Інакше повертає false. |
| peek() | Повертає елемент на вершині стека, але не видаляє його. |
| поп() | Видаляє та повертає верхній елемент стека. Виняток EmptyStackException Виняток виникає, якщо ми викликаємо pop(), коли стек виклику порожній. |
| push (елемент Object) | Розміщує елемент у верхній частині стека. |
| пошук (елемент Object) | Він визначає, чи існує об'єкт у стеку. Якщо елемент знайдено, Він повертає положення елемента з вершини стека. Інакше повертає -1. |
Методи, успадковані від класу java.util.Vector
| МЕТОД | ОПИС |
|---|---|
| add(Object obj) | Додає вказаний елемент у кінець цього вектора. |
| add(int index, Object obj) | Вставляє вказаний елемент у вказану позицію в цьому векторі. |
| addAll(Collection c) | Додає всі елементи вказаної колекції в кінець цього вектора, у тому порядку, в якому їх повертає вказаний ітератор колекції. |
| addAll(int index, Collection c) | Вставляє всі елементи вказаної колекції в цей вектор у вказану позицію. |
| addElement(Object o) | Додає вказаний компонент у кінець цього вектора, збільшуючи його розмір на одиницю. |
| місткість() | Повертає поточну ємність цього вектора. |
| очистити() | Видаляє всі елементи з цього вектора. |
| клонувати() | Повертає клон цього вектора. |
| містить (об'єкт o) | Повертає true, якщо цей вектор містить вказаний елемент. |
| міститьВсе(Колекція c) | Повертає true, якщо цей вектор містить усі елементи вказаної колекції. |
| copyInto(Об'єкт []масив) | Копіює компоненти цього вектора у вказаний масив. |
| elementAt(індекс int) | Повертає компонент за вказаним індексом. |
| елементи () | Повертає перелік компонентів цього вектора. |
| secureCapacity(int minCapacity) | Збільшує ємність цього вектора, якщо необхідно, щоб переконатися, що він може зберігатися принаймні кількість компонентів, визначену аргументом мінімальної ємності. |
| дорівнює() | Порівнює вказаний об’єкт із цим вектором на рівність. |
| firstElement() | Повертає перший компонент (елемент з індексом 0) цього вектора. |
| отримати (індекс індексу) | Повертає елемент у вказаній позиції у цьому векторі. |
| hashCode() | Повертає значення хеш-коду для цього вектора. |
| indexOf(Об'єкт o) | Повертає індекс першого входження зазначеного елемента в цьому векторі або -1 якщо цей вектор не містить елемента. |
| indexOf(Object o, int index) | Повертає індекс першого входження зазначеного елемента в цьому векторі, шукаючи вперед від індексу, або повертає -1, якщо елемент не знайдено. |
| insertElementAt(Object o, int index) | Вставляє вказаний об’єкт як компонент у цей вектор за вказаним індексом. |
| пусто() | Перевіряє, чи цей вектор не має компонентів. |
| ітератор() | Повертає ітератор для елементів цього списку в правильній послідовності. |
| lastElement() | Повертає останній компонент вектора. |
| lastIndexOf(Object o) | Повертає індекс останнього входження зазначеного елемента в цьому векторі або -1 Якщо цей вектор не містить елемента. |
| lastIndexOf(Object o, int index) | Повертає індекс останнього входження зазначеного елемента в цьому векторі, пошук у зворотному напрямку від індексу або повертає -1, якщо елемент не знайдено. |
| listIterator() | Повертає ітератор списку над елементами цього списку (у правильній послідовності). |
| listIterator(індекс int) | Повертає ітератор списку над елементами цього списку (у належній послідовності), починаючи з вказаної позиції в списку. |
| видалити (індекс) | Видаляє елемент у вказаній позиції в цьому векторі. |
| видалити (об'єкт o) | Видаляє перше входження зазначеного елемента в цьому векторі. Якщо вектор не містить елемента, він не змінюється. |
| removeAll(Collection c) | Видаляє з цього вектора всі його елементи, які містяться у вказаній колекції. |
| removeAllElements() | Видаляє всі компоненти з цього вектора та встановлює його розмір до нуля. |
| removeElement(Object o) | Видаляє перше (з найнижчим індексом) входження аргументу з цього вектора. |
| removeElementAt(int index) | Видаляє компонент за вказаним індексом. |
| removeRange(int fromIndex, int toIndex) | Видаляє з цього списку всі елементи, індекс яких знаходиться між fromIndex, включно, і toIndex, винятково. |
| retainAll(Collection c) | Зберігає лише елементи цього вектора, які містяться у вказаній колекції. |
| set(int index, Object o) | Замінює елемент у вказаній позиції в цьому векторі вказаним елементом. |
| setElementAt(Object o, int index) | Встановлює компонент за вказаним індексом цього вектора як вказаний об’єкт. |
| setSize(int newSize) | Встановлює розмір цього вектора. |
| розмір() | Повертає кількість компонентів у цьому векторі. |
| subList(int fromIndex, int toIndex) | Повертає перегляд частини цього списку між fromIndex, включно, та toIndex, винятково. |
| toArray() | Повертає масив, що містить усі елементи цього вектора в правильному порядку. |
| toArray(Об'єкт []масив) | Повертає масив, що містить усі елементи цього вектора в правильному порядку; час виконання тип повернутого масиву є типом зазначеного масиву. |
| toString() | Повертає рядкове представлення цього вектора, що містить рядкове представлення кожного елемента. |
| trimToSize() | Обрізає ємність цього вектора до поточного розміру вектора. |
Пріоритет використання Про що над стеком -:
Клас Stack у Java є застарілим класом і успадковується від Вектор на Java . Це потокобезпечний клас і, отже, передбачає накладні витрати, коли нам не потрібна потокова безпека. Рекомендується до використання ArrayDeque для стекової реалізації, оскільки це більш ефективно в однопоточному середовищі.
Java
додати в масив java
// 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 замість Stack полягає в тому, що Deque має можливість використовувати потоки, які перетворюються на список із збереженням застосування концепції LIFO, тоді як у Stack немає.
Java
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>