Как сделать стек в java

Обновлено: 07.07.2024

Я читал статью Java, но не нашел никаких различий в объявлении и был смущен. Кто-нибудь может меня перечислить?

без более подробной информации о том, что именно задает вопрос, я собираюсь ответить на название вопроса,

это означает, создать ArrayList of String и Integer объекты. Вы не может использовать int потому что это примитивные типы данных, см. ссылку для списка примитива тип данных.

создать Queue : (использование LinkedList)

то же самое как ArrayList , это объявление означает создание Queue of String и Integer объекты.

обновление:

в ответ на ваш комментарий от другого данного ответа,

я довольно смущен сейчас, почему использую строка. а что делает означает

мы используем String только в качестве чистого примера, но вы можете добавить любой другой объект, но главное в том, что вы используете объект не примитивный тип. Каждый примитивный тип данных имеет свой класс примитивной обертки, см. ссылку для списка класса-оболочки примитивного типа данных.

я опубликовал некоторые ссылки, чтобы объяснить разницу между ними, но вот список примитивных типов

что означает, вы не разрешается делать ArrayList целого типа так:

кроме того, вы можете использовать свои собственные объекты, вот мой Monster объект, который я создал,

здесь у нас есть Monster "объект", но теперь в нашем Main.java класс мы хотим вести учет всех наших Monster это то, что мы создаем, поэтому давайте добавим их в ArrayList

(я помог брату моей подруги с Java-игрой, и он должен был сделать что-то в этом роде, как хорошо, но я надеюсь, что пример был хорошо продемонстрирован)


Класс поддерживает один конструктор по умолчанию Stack (), который используется для создания пустого стека .
Ниже программа показывает несколько основных операций, предоставляемых классом Stack:

// Java-код для реализации стека

// Вставка элемента в верхнюю часть стека

static void stack_push(Stack stack)

for ( int i = 0 ; i 5 ; i++)

// выталкивающий элемент сверху стека

static void stack_pop(Stack stack)

for ( int i = 0 ; i 5 ; i++)

Integer y = (Integer) stack.pop();

// Отображение элемента в верхней части стека

static void stack_peek(Stack stack)

Integer element = (Integer) stack.peek();

System.out.println( "Element on stack top : " + element);

// Поиск элемента в стеке

static void stack_search(Stack stack, int element)

Integer pos = (Integer) stack.search(element);

System.out.println( "Element not found" );

System.out.println( "Element is found at position " + pos);

public static void main (String[] args)

Stack stack = new Stack ();

Методы в классе Stack

  1. Object push ( Object element ) : помещает элемент на вершину стека.
  2. Object pop () : удаляет и возвращает верхний элемент стека. Исключение 'EmptyStackException' генерируется, если мы вызываем pop (), когда вызывающий стек пуст.
  3. Object peek () : возвращает элемент в верхней части стека, но не удаляет его.
  4. boolean empty () : возвращает true, если на вершине стека ничего нет. Остальное возвращает false.
  5. int search ( Object element ) : определяет, существует ли объект в стеке. Если элемент найден, он возвращает позицию элемента с вершины стека. Иначе, это возвращает -1.

Эта статья предоставлена Мехаком Нарангом.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Класс Stack является подклассом Vector и реализовывает структуру “крайний на вход – первый на выход”.

Этот класс имеет только один конструктор по умолчанию и все методы класса Vector. Плюс к этому Stack имеет ещё свои 5 методов:

  • boolean empty()
    Этот метод проверяет, является ли стэк пустым или нет. Если стэк пустой – возвращает true, если нет – false.
  • Objectpeek()
    Этот метод возвращает элемент, который находится на вершине стека.
  • Object pop()
    Этот метод возвращает элемент, который находится на вершине стека и удаляет его.
  • Object push(Object element)
    Этот метод добавляет указанный элемент на вершину стека.
  • int search(Object element)
    Этот метод выполняет поиск указанного элемента в стеке. Если искомый элемент найден – возвращается его “отдалённость” от вершины (порядковый номер). Если элемент не найден – возвращается значение -1.

Для понимания того, как это работает на практике, рассмотрим пример простого приложения.

В результате работы программы мы получим следующий результат:

В этом уроке мы изучили основы класса Stack и рассмотрели простой пример с его использованием.

Какой класс лучше использовать для использования стека в java и почему он лучше?


3 ответа 3

Deque

Для стэка рекомендуется использовать реализации интерфейса Deque . Интерфейс включает методы стэка: push , poll и peek .

Стандартные реализации перечислены в документации, например:

    — дэк на основе массива; — связный список; — потокобезопасная реализация.

Выбор класса зависит от логики приложения (какие операции выполняются и как часто, как изменяется размер стэка) и потребует оценки производительности.

В документации к ArrayDeque утверждается, что в качестве очереди он, скорее всего, будет быстрее LinkedList :

. This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.

так что, если не требуется доступ из нескольких потоков, разумно будет использовать ArrayDeque по умолчанию.

Методы poll и peek в Deque унаследованы от Queue и работают в последовательности для очереди (FIFO). Для симуляции работы стэка можно использовать вместо них методы pollLast и peekLast .

Queue

Более удобный вариант: с помощью метода Collections.asLifoQueue преобразовать Deque в объект Queue , который ведет себя как стэк (LIFO). В этом случае будут корректно работать все методы и итераторы. Также не будут доступны лишние, не допустимые для стэка операции:

Stack не рекомендуется использовать

Также есть стандартный класс java.util.Stack , но его не рекомендуется использовать. Из документации:

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 ();

Более полный и согласованный набор LIFO операций предоставляется через интерфейс Deque и его реализации, которые должны использоваться вместо этого класса. Например: Deque stack = new ArrayDeque ();

т.е. класс сохранен для обратной совместимости, но вместо него нужно использовать реализации Deque . Это вызвано историческими причинами: в первой версии Java в реализации Stack допущены ошибки, например:

Читайте также: