Руководство по Java Core. Структуры данных в языке Java. Stack.
Класс Stack является подклассом Vector и реализовывает структуру “крайний на вход – первый на выход”.
Этот класс имеет только один конструктор по умолчанию и все методы класса Vector. Плюс к этому Stack имеет ещё свои 5 методов:
- boolean empty()
Этот метод проверяет, является ли стэк пустым или нет. Если стэк пустой – возвращает true, если нет – false. - Objectpeek()
Этот метод возвращает элемент, который находится на вершине стека. - Object pop()
Этот метод возвращает элемент, который находится на вершине стека и удаляет его. - Object push(Object element)
Этот метод добавляет указанный элемент на вершину стека. - int search(Object element)
Этот метод выполняет поиск указанного элемента в стеке. Если искомый элемент найден – возвращается его “отдалённость” от вершины (порядковый номер). Если элемент не найден – возвращается значение -1.
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
import java.util.Stack; public class StackDemo < public static void main(String[] args) < Stack stack = new Stack(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); System.out.println("Initial stack: " + stack); System.out.println("Searching value 3 in stack. "); System.out.println(stack.search(3)); System.out.println("Searching value 10 in stack. "); System.out.println(stack.search(10)); stack.pop(); stack.pop(); System.out.println("Pushing values 6,7,8 into stack. "); stack.push(6); stack.push(7); stack.push(8); System.out.println("First element of the stack: " + stack.peek()); System.out.println("Final stack: " + stack); >>
В результате работы программы мы получим следующий результат:
/*Some System Messages*/ Initial stack: [1, 2, 3, 4, 5] Searching value 3 in stack. 3 Searching value 10 in stack. -1 Pushing values 6,7,8 into stack. First element of the stack: 8 Final stack: [1, 2, 3, 6, 7, 8]
В этом уроке мы изучили основы класса Stack и рассмотрели простой пример с его использованием.
Полезности
Туториалы
Системный дизайн
Собеседования
Студенты
Задачи
Немного о себе
Приветствую! Меня зовут Евгений. На этом сайте я пишу о разработке программного обеспечения. Связаться со мной вы можете по email: proselytear@yahoo.com Имеет смысл, предварительно ознакомиться вот с этим FAQ разделом.
Недавние публикации
- Механизмы CAS и FAA глазами Java разработчика
- ExecutorService в Java и примеры его применения.
- Особенности работы PreparedStatement в JDBC
- Основы кэширования в Hibernate
- Феномены чтения глазами разработчика
Copyright © 2023 PROSELYTE.
Omega WordPress Theme by ThemeHall
Класс Stack
Современные программисты сейчас практически не используют Stack, который слишком прост и не очень гибок. Тем не менее, изучить его стоит, может именно он вам и пригодится.
Stack является подклассом класса Vector, который реализует простой механизм типа «последний вошёл — первый вышел» (LIFO). Можно представить процесс в виде детской пирамидки, когда вы по одному нанизываете диск на колышек. И снять диски вы сможете только по порядку, начиная с верхнего.
Взять элемент, который положили первым, вам никто не позволит. Даже не пытайтесь сделать так.
Напишем простейший пример применения стека.
Stack stack = new Stack<>(); stack.push(0); stack.push(1); stack.push(2); System.out.println("Текущий стек: " + stack); System.out.println("Удаляем: " + stack.pop()); System.out.println("Удаляем: " + stack.pop()); System.out.println("Удаляем: " + stack.pop()); System.out.println("Текущий стек: " + stack);
I/System.out: Текущий стек: [0, 1, 2] I/System.out: Удаляем: 2 I/System.out: Удаляем: 1 I/System.out: Удаляем: 0 I/System.out: Текущий стек: []
Метод push() помещает объект в стек, а метод pop(), наоборот, вытаскивает объект из стека.
Пример с числами слишком скучный. Давайте позовём на помощь котов. Создадим простой класс Cat:
package ru.alexanderklimov.expresscourse; public class Cat < private String mName; private int mAge; public Cat(String name, int age) < mName = name; mAge = age; >@Override public String toString() < return this.mName; >>
Представьте себе, что имеется длинная узкая труба, запаянная с одного конца. Мы заталкиваем в трубу пушистого друга, поэтому метод называется «пуш» (push()). А чтобы вытащить кота, хватаем его за попу (метод pop()). Давайте запихаем в трубу трёх котов, а потом вытащим их.
Cat barsik = new Cat("Барсик", 4); Cat murzik = new Cat("Мурзик", 6); Cat vaska = new Cat("Васька", 9); Stack catStack = new Stack<>(); catStack.push(barsik); catStack.push(murzik); catStack.push(vaska); Log.i(TAG, "Текущий стек: " + catStack); Log.i(TAG, "Брысь " + catStack.pop()); Log.i(TAG, "Кто последний? " + catStack.peek().toString()); Log.i(TAG, "Брысь " + catStack.pop()); Log.i(TAG, "Кто последний? " + catStack.peek().toString()); Log.i(TAG, "Брысь " + catStack.pop()); Log.i(TAG, "Никого? " + catStack.empty()); try < Log.i(TAG, "Кто последний? " + catStack.peek().toString()); >catch (EmptyStackException e) < Log.i(TAG, "Пустой стек. Некого прогонять"); >Log.i(TAG, "Текущий стек: " + catStack);
У нас есть три кота — Барсик, Мурзик и Васька. В такой последовательности мы их запихнули в трубу и проверяем текущий стек.
I/ExpressCourse: Текущий стек: [Барсик, Мурзик, Васька]
Вызываем метод pop() первый раз. Как видите, мы не указываем позицию элемента, так стек работает только с последним элементом. Последним был Васька. Чтобы узнать, кто теперь последний в стеке, не удаляя его оттуда, нужно вызвать метод peek().
I/ExpressCourse: Брысь Васька I/ExpressCourse: Кто последний? Мурзик
Повторяем этот шаг ещё раз и вытаскиваем кота Мурзика. Затем и Барсика.
I/ExpressCourse: Брысь Мурзик I/ExpressCourse: Кто последний? Барсик I/ExpressCourse: Брысь Барсик
Чтобы убедиться, что в трубе никого не осталось, вызываем метод empty(), который возвращает булево значение.
I/ExpressCourse: Никого? true
Если при пустом стеке вызвать методы pop() или peek(), то программа закроется с ошибкой. Чтобы избежать подобной ситуации, нужно обработать исключение EmptyStackException. Тогда программа будет работать без сбоев.
I/ExpressCourse: Пустой стек. Некого прогонять
В конце выводим информацию о пустом стеке.
I/ExpressCourse: Текущий стек: []
У класса также есть метод int search(Object o), который ищет заданный элемент в стеке, возвращая количество операций pop(), которые требуются для того чтобы перевести искомый элемент в вершину стека. Если заданный элемент в стеке отсутствует, этот метод возвращает -1.
Надеюсь, вы поняли что такое стек. Пожалуйста, не загоняйте котов в трубу.
30.4. Java – Класс Stack
Класс Stack – это подкласс Vector, который реализует стандартный стек last-in, first-out.
В Java Stack только определяет стандартный конструктор, который создает пустой стек. Stack включает все методы, определённые Vector, и самостоятельно добавляет несколько своих собственных.
Stack()
Методы
Кроме методов, унаследованных от его родительского класса Vector, Stack в Java определяет следующие методы.
| № | Метод и описание |
| 1 | boolean empty() Проверяет, является ли стек пустым. Возвращает true, если стек пустой. Возвращает false, если стек содержит элементы. |
| 2 | Object peek() Возвращает элемент, находящийся в верхней части стэка, но не удаляет его. |
| 3 | Object pop() Возвращает элемент, находящийся в верхней части стэка, удаляя его в процессе. |
| 4 | Object push(Object element) Вталкивает элемент в стек. Элемент также возвращается. |
| 5 | int search(Object element) Ищет элемент в стеке. Если найден, возвращается его смещение от вершины стека. В противном случае возвращается 1. |
Пример
Следующая программа показывает несколько методов, поддерживаемых коллекцией Stack в Java:
import java.util.*; public class StackDemo < static void showpush(Stack st, int a) < st.push(new Integer(a)); System.out.println("Втолкнуть(" + a + ")"); System.out.println("Стек: " + st); >static void showpop(Stack st) < System.out.print("Выстрелить ->"); Integer a = (Integer) st.pop(); System.out.println(a); System.out.println("Стек: " + st); > public static void main(String args[]) < Stack st = new Stack(); System.out.println("Стек: " + st); showpush(st, 42); showpush(st, 66); showpush(st, 99); showpop(st); showpop(st); showpop(st); try < showpop(st); >catch (EmptyStackException e) < System.out.println("Пустой стек"); >> >
Стек: [ ] Втолкнуть (42) Стек: [42] Втолкнуть (66) Стек: [42, 66] Втолкнуть (99) Стек: [42, 66, 99] Выстрелить -> 99 Стек: [42, 66] Выстрелить -> 66 Стек: [42] Выстрелить -> 42 Стек: [ ] Выстрелить -> Пустой стек
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Что такое stack java
Class Stack
- java.lang.Object
-
- java.util.AbstractCollection
-
- java.util.AbstractList
-
- java.util.Vector
-
- java.util.Stack
- All Implemented Interfaces: Serializable, Cloneable, Iterable, Collection, List, RandomAccess
The Stack class represents a last-in-first-out (LIFO) stack of objects. It extends class Vector with five operations that allow a vector to be treated as a stack. The usual push and pop operations are provided, as well as a method to peek at the top item on the stack, a method to test for whether the stack is empty, and a method to search the stack for an item and discover how far it is from the top. When a stack is first created, it contains no items. A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class. For example:
Deque stack = new ArrayDeque();Field Summary
Fields inherited from class java.util.Vector
Fields inherited from class java.util.AbstractList
Constructor Summary
Creates an empty Stack.
Method Summary
All Methods Instance Methods Concrete Methods
Modifier and Type Method and Description boolean empty () Tests if this stack is empty.
Looks at the object at the top of this stack without removing it from the stack.
Removes the object at the top of this stack and returns that object as the value of this function.
Pushes an item onto the top of this stack.
Returns the 1-based position where an object is on this stack.
