Пример стека Java  



Java Стек

Что такое класс Java Stack?  

Реализация класса стека Java основана на структуре данных стека. Он следует концепции концепции Last-In-First-Out (LIFO), которая означает, что элемент, который мы вставляем последним, будет удален первым. Другими словами, мы можем удалять элементы только с вершины стека. Класс Java Stack расширяет класс Vector и, следовательно, также импортирует методы класса Vector. В этом руководстве мы узнаем о классе стека Java и методах с реализацией стека в Java с примерами и различными операциями.

Работа со структурой данных Java Stack  

Класс стека в Java выполняет две основные операции по вставке и удалению элементов. Метод push () вставляет элемент, а метод pop () удаляет элемент. Обе операции выполняются сверху стека.

На приведенной ниже диаграмме представлена ​​работа структуры данных стека в java.

Реализация стека Java

Операция нажатия:

Когда мы вставляем каждый элемент в стек с помощью метода push, последний вставленный элемент всегда будет наверху. Он продолжает добавлять элементы поверх старого элемента. Например, сначала мы вставляем 10, затем 20. В этом случае 20 будет поверх 10 и так далее.

Реализация стека Java

Поп-операция:

Метод pop удаляет последний вставленный элемент из вершины стека. Это соответствует концепции LIFO, которая является последним вошел - первым ушел. Например, если у нас есть 5 элементов 10,20,30,40, 50, 50, XNUMX и XNUMX. Следовательно, когда мы используем метод pop (), он сначала удаляет значение XNUMX, поскольку это самый верхний элемент, присутствующий в стеке.

Смотрите также
ListIterator в Java

Операции со стеком Java

Как создать стек на Java  

Мы можем создать пустой стек, используя конструктор по умолчанию stack(). Чтобы реализовать структуру данных стека, нам нужно импортировать пакет java.util.stack.

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

E обозначает тип дженериков.

Методы стека в Java  

Ниже приведены методы, которые являются частью класса Stack.

методыОписание
логическое пустое ()Проверяет, пуста ли стопка
Возвращает true, если стек пуст, иначе возвращает false
Целочисленный peek ()Возвращает последний вставленный элемент, который находится наверху стека.
Целочисленный pop ()Возвращает и удаляет последний вставленный элемент, который находится наверху стека.
Целочисленное нажатие (целое число e)Помещает или вставляет элемент в стек
int search (объект o)Ищет указанный элемент в стеке и возвращает расстояние от вершины стека.

Ниже приведены методы класса Vector. Класс стека также импортирует все методы класса Vector.

Способ доставкиОписаниеПараметр
Логическое сложение (объект e)Добавляет указанный элемент в конец вектораe - добавляемый элемент.
Возвращаемое значение - Истина
void add (int index, объект e)Добавляет элемент по указанному индексу. Если индекс уже содержит элемент, он смещается вправо index - индекс, по которому нужно вставить элемент
e - элемент, который нужно вставить
Логическое addAll (Коллекция c)Добавляет в вектор коллекцию указанных элементовc - коллекция добавляемых элементов
Возвращаемое значение - истина
Логическое addAll (индекс int, Коллекция c)Добавляет коллекцию элементов по указанному индексу. Если индекс уже содержит элемент, он впоследствии сдвигается вправоindex - индекс, по которому нужно добавить элементы
c - коллекция добавляемых элементов
Возвращаемое значение - Истина
void addElement (объект obj)Добавляет указанный компонент к векторуobj - компонент, который будет добавлен
int емкость ()Возвращает текущую емкость или размер вектора.
пусто ясно ()Удаляет все элементы из вектора и становится пустым
Клон объекта ()Возвращает клон вектора, где копия содержит ссылку на клон внутреннего массива данных.
Логическое значение содержит (Объект o)Проверяет, содержит ли вектор указанный элементВозвращаемое значение - истина, если список содержит элемент
Логическое значение containsAll (Коллекция c)Проверяет, содержит ли вектор все элементы в коллекцииВозвращаемое значение - истина, если список содержит все элементы
void copyInto (Object [] anArray)Копирует содержимое вектора в указанный массивanArray - массив, который должен содержать содержимое вектора
Объект elementAt (индекс int)Возвращает объект по указанному индексу
Элементы перечисления ()Возвращает перечисление всех компонентов в векторе, где начальный индекс равен 0
недействительным sureCapacity (int minCapacity)Гарантирует, что вектор может содержать наименьшую указанную минимальную емкость
Логическое равно (объект o)Сравнивает, содержит ли вектор все указанные элементы в точном порядке.Возвращаемое значение - истина, если элементы объекта совпадают со списком
Объект firstElement ()Возвращает первый компонент с индексом 0
void forEach (действие потребителя)Выполняет заданное действие для элемента в векторе на итерации.
Получить объект (индекс int)Возвращает элемент по указанному индексуindex - позиция элемента, который будет извлечен
int indexOf (объект o)Получает индекс первого вхождения указанного элементаo - Идентифицируемый элемент
Возвращаемое значение - значение индекса
int indexOf (объект o, индекс int)Возвращает индекс первого появления указанного элемента, начиная с указанного индекса.o - Идентифицируемый элемент
index - начальный индекс поиска
void insertElementAt (объект o, индекс int)Вставляет указанный объект как компонент в вектор по указанному индексуo - Идентифицируемый элемент
index - индекс, по которому должен быть вставлен элемент
логическое isEmpty ()Проверяет, пуст ли вектор
Итератор итератор ()Возвращает итератор по элементам вектора.
Объект lastElement ()Возвращает последний элемент вектора.
int lastIndex (Объект o)Возвращает последнее вхождение указанного элемента. Если нет, возвращает -1.
int lastIndex (объект o, индекс int)Возвращает последнее вхождение указанного элемента при поиске в обратном направлении от указанного индекса. Если нет, возвращает -1.
ListIterator listiterator ()Возвращает листитератор по элементам в векторе.
ListIterator listiterator (индекс целого числа)Возвращает список-итератор по элементам в векторе из указанного индекса.
Удаление объекта (индекс int)Удаляет элемент по указанному индексу из вектораВозвращаемое значение - элемент, который удаляется
логическое удаление (объект o)Удаляет указанный элемент из вектораВозвращаемое значение - истина, если удалено
Логическое removeAll (Коллекция c)Удаляет все элементы Коллекции из вектораc - Элементы коллекции
void removeAllElements ()Удаляет все компоненты из вектора и устанавливает размер на 0
логическое removeElement (Объект o)Удаляет указанный элемент из вектораВозвращаемое значение - истина, если удалено
void removeElementAt (индекс целого числа)Удаляет или удаляет компонент по указанному индексу
boolean removeIf (фильтр предикатов)Удаляет все элементы, удовлетворяющие заданному предикатуфильтр - условие, которое будет применяться
Логическое значение keepAll (Коллекция c)Сохраняет в векторе все элементы, указанные в коллекции. Остальные элементы будут удаленыc - набор элементов, которые необходимо сохранить
Возвращаемое значение - истина, если вектор изменился из-за вызванного метода
Набор объектов (int index, Object o)Заменяет элемент по указанному индексу переданным объектомo - элемент, который нужно заменить
index - индекс элемента
Возвращаемое значение - возвращает элемент, который ранее находился по указанному индексу.
void setElementAt (объект o, индекс int)Устанавливает компонент по указанному индексу, отбрасывая старое значениеo - элемент, который нужно установить
index - индекс, по которому элемент должен быть обновлен
void setSize (int newsize)Устанавливает размер вектора с указанным значениемnewsize - размер вектора
размер int ()Возвращает количество компонентов в векторе.
пустая сортировка (Comparator c)Сортирует элементы в векторе на основе компаратора.c - значение компаратора
Подсписок списка (int fromIndex, int toIndex)Извлекает часть списка на основе start и endIndexfromIndex - позиция, из которой нужно извлечь подсписок (включить)
toIndex - индекс, до которого подсписок должен быть извлечен (исключен)
Объект [] toArray ()Возвращает массив элементов вектора
void trimToSize ()Обрезает емкость вектора до текущего размера емкости
Смотрите также
Найти максимальную глубину вложенных скобок в строке

Примеры стека Java  

Ниже приведены различные примеры стека Java для различных операций со стеком в java.

Пример: push () - Добавление элементов в стек

В приведенном ниже примере показано, как вставить элемент в стек Java с помощью метода push (). Это эквивалентно методу add () функции вектор класс. Каждый раз, когда он добавляет элемент, он идет в конец стека, так что последний вставленный элемент будет наверху.

import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
  }

}
Elements in stack: [10, 20, 30, 40, 50]

Пример: pop () - Удаляет элементы из стека.

В приведенном ниже примере показано, как удалять элементы из стека. Сначала он удаляет последний элемент из вершины стека. Следовательно, первый метод pop () возвращает 50, который является последним вставленным элементом, за которым следует элемент 40 для второго метода pop ().

import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
    
    int x = s.pop();
    System.out.println("Element removed from stack: " + x);
    
    x = s.pop();
    System.out.println("Element removed from stack: " + x);
  }

}
Elements in stack: [10, 20, 30, 40, 50]
Element removed from stack: 50
Element removed from stack: 40

Пример: метод search ()

Метод search () ищет определенный элемент и возвращает позицию, начиная с вершины стека. В этом примере элемент 30 находится в 3-й позиции, а элемент 40 - во 2-й позиции.

import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
    
    System.out.println("The index of element 30 using search method: " + s.search(30));
    System.out.println("The index of element 40 using search method: " + s.search(40));
  }

}
Elements in stack: [10, 20, 30, 40, 50]
The index of element 30 using search method: 3
The index of element 40 using search method: 2

Пример: метод peek ()

Метод peek () возвращает последний вставленный элемент, который является самым верхним элементом. Этот метод только извлекает значение, но не удаляет его из стека.

import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
    System.out.println("Element returned using the peek() method: " + s.peek());
    
  }

}
Elements in stack: [10, 20, 30, 40, 50]
Element returned using the peek() method: 50

Пример: итерация по элементам стека Java

Мы можем перебирать все элементы в стеке Java, используя итератор присутствует в классе Vector. В приведенном ниже примере показано, как перебирать стек.

import java.util.Iterator;
import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
    
    Iterator<Integer> i = s.iterator();
    while(i.hasNext())
      System.out.println(i.next());
    
  }

}
Elements in stack: [10, 20, 30, 40, 50]
10
20
30
40
50

Пример: очистить стек, если он пуст

Ниже приведен пример очистки элементов в стеке с помощью метода clear () и проверки того, является ли атака пустой, с помощью метода isEmpty (). Первоначально, когда мы создаем стек, он будет пустым. Это также называется пустым стеком.

import java.util.Iterator;
import java.util.Stack;

public class StackDemo {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    
    s.push(10);
    s.push(20);
    s.push(30);
    s.push(40);
    s.push(50);
    
    System.out.println("Elements in stack: " + s);
    System.out.println("Is stack empty: " + s.isEmpty());
    
    s.clear();
    System.out.println("Elements in stack after clear method: " + s);
    System.out.println("Is stack empty: " + s.isEmpty());
    
  }

}
Elements in stack: [10, 20, 30, 40, 50]
Is stack empty: false
Elements in stack after clear method: []
Is stack empty: true

Пример: преобразование списка Java в стек

Мы можем преобразовать список Java в стек, добавив в стек коллекцию элементов списка с помощью метода addAll ().

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class ListToStack {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    List<Integer> l = new ArrayList<Integer>();
    
    l.add(10);
    l.add(20);
    l.add(30);
    l.add(40);
    l.add(50);
    
    s.addAll(l);
    System.out.println("Elements in stack from List: " + s);

  }

}
Elements in stack from List: [10, 20, 30, 40, 50]

Пример: преобразование массива в стек

В приведенном ниже примере мы добавляем элементы массива в стек с помощью метода push ().

import java.util.Stack;

public class ArrayToStack {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    int[] num = {10,20,30,40,50};
    
    for(int i : num)
      s.push(i);
    
    System.out.println("Array elements in stack: " + s);
  }

}
Array elements in stack: [10, 20, 30, 40, 50]

Пример: преобразование стека в массив

Мы также можем преобразовать стек в массив с помощью метода toArray (), как в приведенном ниже примере.

import java.util.Stack;

public class StackToArray {

  public static void main(String[] args) {
    Stack<Integer> s = new Stack<Integer>();
    s.push(10);
    s.push(20);
    s.push(30);
    
    System.out.println("Elements in stack: " + s);
    
    Object[] arr = s.toArray();
    System.out.println("Elements in Array: ");
    for(int i=0;i<arr.length;i++)
      System.out.print(arr[i] + " ");
  }

}
Elements in stack: [10, 20, 30]
Elements in Array: 
10 20 30

Заключение  

В этом руководстве мы увидели, как использовать класс и методы стека Java, а также реализацию стека и примеры.

Смотрите также
Супер ключевое слово в Java

Справка