CodeGym /Java блог /Случаен /Java Stack 101: Вникване в класа на стека
John Squirrels
Ниво
San Francisco

Java Stack 101: Вникване в класа на стека

Публикувано в групата
Стекът в Java е структура от данни, много подобна на опашка, масив, свързан списък or дърво . Това, където се различава от другите е, че Java Stack се основава на принципа Last In, First Out (LIFO). Това означава, че когато използвате двете команди за добавяне и премахване на елемент от стека, първият, който премахнете, винаги ще бъде последният, който сте добавor. Нека да разгледаме по-подробно Java Stack Class

Изследване на Java Stack Class

Java Stack Class е разширение на класа Vector , който сам разширява класа List . Тъй като векторите са променливи и могат да растат и да се свиват с изискванията на елементите вътре, Stack може също да променя размерите при поискване. Разширението на класа Vector добавя пет операции, които трансформират Vector в Stack . Тези пет операции са:
  • .push(E item) – поставя елемент в горната част на стека
  • .pop() – премахва елемента в горната част на стека и го връща като стойност на функцията
  • .peek() – разглежда елемента в горната част на стека, без да го премахва
  • .empty() – Булева функция за тестване дали стекът е празен or не. Връща 0 or 1.
  • .search(Object o) – Търси o и връща позицията му. Стойността е базирана на 1, а не на база 0
Stack също така наследява всички методи, които са част от Vector , включително, но не само, toString() , contains() , indexOf() и lastElement() . Java Stack 101: Задълбочаване в класа на стека - 1

Пример за codeиране на Java стек

Сега, след като знаем функциите за Stack , нека codeираме пример за стек на Java. Stack са много полезни за работа с данни, които трябва да се съхраняват временно и да се извличат бързо. Тъй като стекът е LIFO, той е изключително полезен за обхождане на възли при изследване на дървовидна структура от данни. Преди да навлезем във всичко това, нека създадем основен стек. Кодът за внедряване на стек е Howто следва:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
Това е всичко, което трябва да направите, за да създадете празен стек . Можете също така просто да го декларирате, без да декларирате тип данни, като използвате:

Stack example = new Stack();
Не забравяйте, че тъй като Stack са променливи, докато поставяме елементи в стека, той автоматично ще коригира размера си. Сега нека да разгледаме How да използвате функциите на Stack .

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

Нека да разгледаме How да използваме петте метода, които разгледахме накратко по-рано. Имплементацията на стека на Java е лесна за запомняне, ако си представите това като стек от плочи. Слагате чинии върху стека, но за да получите чиния, не отивате на дъното, а взимате една отгоре. Последният, който слагате, е първият, който сваляте. Разширявайки предишния ни пример със stackExample , функциите са Howто следва:

Бутане


// 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() с предварително condition while цикъл, за да извадите всички елементи от стека . Вижте How се прави тази реализация на стека на Java.

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
Изход

10
5

надникнете

Можем да използваме .peek() като реализация на стека в Java, за да разгледаме следващия елемент в стека , без да го премахваме.

System.out.println(stackExample.peek());
Изход

10
Ако извадим и отпечатаме стека , той ще върне 10 и 5, защото 10 все още е в стека. Просто го погледнахме, не го премахнахме с функцията pop. Функцията peek е чудесен инструмент за Stack в java.

Търсене

Ако искаме да намерим конкретен елемент, реализацията на стекове в Java използва .search(e); да го намериш.

System.out.println(stackExample.search(5));
Изход

2
Не забравяйте, че това е така, защото ние броим от върха на стека и стека на Java започва от 1, а не от 0 като масив . И така, гледайки стека, това е (10) --> (5), а 5 е на място номер 2. Ако се опитате да намерите елемент, който не е в стека , ще получите -1 като изход.

Итерация

Когато работите с която и да е колекция, може да има моменти, когато трябва да търсите множество елементи. За да спестите сложност и необходимост да търсите в стека многократно, можете да използвате итерация. Тъй като Stack в Java разширява класа List , има няколко опции за повторение. Един от най-лесните е просто да използвате функцията ListIterator . ListIterator е хубав с това, че ви позволява да обхождате стека отгоре надолу or отдолу нагоре, като използвате .hasPrevious() or .hasNext() . Ето How изглежда:

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
Изход

10
5
Имайте предвид, че когато итерирате през Stack в Java, вие не премахвате ниHowви елементи в него. Итерирането по същество ви позволява да надникнете във всеки елемент в стека по ред. Когато направите това, можете да търсите места, където са определени елементи, и след това да преминете през тях и да ги манипулирате. Можете да ги преброите, изтриете or дори да ги промените, ако е необходимо.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION